Find your next car on CarsGuide with more than 120,000 new & used cars from private sellers & car dealers. It's free to sell your car with Australia's largest auto brand.
Technical articles and stack decisions from CarsGuide
Arm Versus x86 for database server comparison review
At CarsGuide we decided for migrate some of our common services hosted in AWS from a traditional x86 instance to the Graviton2-based instances, aka Arm instance. We want to explore the new processor…
Cloud Pub/Sub in Laravel
Cloud Pub/Sub is a real-time asynchronous messaging service that is fully-managed, it allows you to send and receive messages between applications that do not depend on each other…
A easy way to secure customer access for multi-tenant application by using auth0 app_metadata
A lot of company have a business need to support multiple tenants. Some company choose single tenant architecture, while others might choose multiple tenant architecture. This article will explain a…
How to Dockerize a Laravel application
Docker is an open source tool that allows you to develop, ship, and run applications. One of its main advantages is that it allows you to run an application in an isolated environment. It goes by the…
My Introduction to Flutter
Just prior to the beginning of Q2 I was asked if I would be interested in joining a new team focused on building the apps for our two products. I had been working on the web app of one of these…
One Month into working remotely — a review of what worked well and what did not
On Tuesday the 17th of March, almost all of us working at company’s Surry Hills head office waves each other bye as usual before the end of the day. Most believe we would probably meet again in the…
Securing open source software
Open source is great for boosting productivity but taking code written by others can put our application at risk. A report published in 2019 found there had been an 88% increase in application…
Post-mortem of an upstream outage
In the well-architected framework of AWS, reliability is one of the five pillars — you need to design your systems for failure. But how often do you get to test your design in a real deal outage? In…
Laravel: Pub-Sub Messaging with Apache Kafka
Microservices communication is usually done by two protocols. In most cases, it is performed by HTTP request/response with resource APIs (i.e. REST), and lightweight asynchronous messaging (i.e…
Cloud 2.0
So you have your entire production workload running in the (public) cloud, congratulations! Can you sink back into your daily routine now? Not every project is a greenfield project. When we really…
Javascript’s Web Audio API
Javascript’s Web Audio API is a great tool to control audio events on the web. It has a variety of uses; manipulating audio and applying effects, analyzing audio attributes, building audio…
Go vs PHP syntax comparison
Go is a statically typed and compiled language designed by Google. It is somewhat similar to C. However, it is packed with more goodies such as garbage collection, memory safety, structural typing…
BrowserStack vs CloudQA vs AWS Device farm vs cypress comparison
Being a senior test analyst it becomes my duty to convince my manager on implementing a cost effective cross browser and automation tool that can run tests on real devices and browsers on both…
PHP 5 vs. PHP 7
Zend Engine (ZE) is the open source scripting engine that interprets and compiles PHP. In PHP 7, ZE has been refactored and improved, and it is called PHP Next Generation (PHPNG). PHPNG aims to…
Figuring
Sure, there’s a lot of things you can do to improve a web app’s performance, such as lazy loading or code splitting scripts that aren’t needed immediately for that page, reducing the amount of code…
Callbacks vs. Promises vs. Async/Await in JS
Let’s take a look at the following consoleLog() function that console logs a given string after a random amount of timeout: However, doing the above will result in console logging “first”…
PHP vs Javascript Syntax
PHP and Javascript play complementary roles in most modern web application stack. With the adoption of outcome-driven team structure in Carsguide, each team and and individual developers are…
Juniors take on web directions — code
A juniors take on web directions
Common JS Gotchas — Part 2
This blog will discuss several common JS mistakes that JS developers make, and other important JS misconceptions and quirks. Please read Part 1 of this blog if you haven’t already done so. In Part…
PHP VCR - A Easy Way To Mock External API Calls
When you run above test case, you would see it costs 1.45 seconds. That is because the test case would access api.github.com in the first time. Also you would see a file called github.yml is…
I wanna use regex… but what does it all mean???
When I first started programming I really wanted to be good at regex. I was working on a simple little project that involved scraping a website for plant data. This data was like most scraped data……
Web Directions — Code 2019
I have just attended my first Web Directions conference and thoroughly enjoyed the experience. A big thank you goes out to the speakers, John Allsopp and all of the organisers for their work on such…
Common JS Mistakes — Part 1
This blog will discuss several common JS mistakes that JS developers make, and other important JS misconceptions and quirks. In Part 1, we will discuss equality, truthy and falsy, floating point…
Automated enforcement of ESLint
Setup automated enforcement of ESLint using Husky and lint-staged.
Understanding Async with the JS Event Loop
The JavaScript event loop is something that JS developers will work with every day; whether they know it or not. With this model comes a lot of surprising “gotchas”. You might expect the timeout to…
Is Drupal a CMS?
Ok, I think this is a bit confusing. The choice of the CMS definition on the homepage was probably made because it is a better known term. It makes it easier to position the tool among all the…
Xdebug with PHPstorm + docker + macOS
Recently I was in a situation where I needed to debug a very hard to find issue and I found myself needing something more than the trusty dd() or var_dump. I figured I would set up xdebug, but this…
JavaScript Gotcha — Shallow & Deep copy
When dealing with JavaScript it’s important to understand how to handle cloning an object to avoid modifying any existing data. To do this we have to understand the difference between a shallow and a…
How to Better Handle Your Errors
Errors can be divided into 2 categories: “How to Better Handle Your Errors” is published by Wilsen Tjhung in Autotrader & Carsguide Engineering
Creating road map- facts to consider
I have recently created a QA road map for 2019 and presented to the Senior technology team. It was really an engaging meeting. A few valuable suggestions were received from my peers and managers as…
SheLovesData Sydney: Introductory Data Analytics Workshop (Feb 2019)
The focus of the even was about data, data analytics, data-related terms, sql and data visualization. Data analysis is the art of mixing mathematics, machine learning and business experience to…
Neural Networks to remain the most researched AI approach in 2019 for Facebook and Google, based…
In 2018 Google and Facebook Artificial Intelligence research labs have again heavily invested into neural networks: This is still the most researched approach to IA, concentrated more than 2/3 of…
Web Security 101(TL;DR)
Attacks. “Web Security 101(TL;DR)” is published by Wilsen Tjhung in Autotrader & Carsguide Engineering
Test automation: 7 key trends to watch in 2019
Now that we are in 2019, while looking for latest trends in test automation, I came across a brilliant article from Joe Colantonio, Founder, TestTalks giving an insight into the key trends to watch…
How our kubernetes journey saved us $1 million dollars
Early in 2018 our engineering team embarked on a journey to revamp our infrastructure and tooling. In essence our developer experience was far from were we needed it to be. Having a poor developer…
Add Konami Code with GTM
If you play video games or know easter eggs, you might be familiar with the Konami Code. It was first created by Konami game developers to help with play testing the later stages of their game. Since…
2018
There’s no other way to cut it, 2018 has been a big year for the team here at Cox Automotive. One that started with a mandate to climb Everest (launch Autotrader), continue to build on our position…
Why vs What; Context is King
One vital thing to make a productive product and engineering team is context and that context is king. Setting context has been a huge focus for us and a recent catch up with one of our engineers…
“CHUNK” — Be Careful!
Laravel “chunk” method is widely used to split large query into smaller chunks when processing large database. But there is a trick if the attribute used in query would be changed in call back…
Persistent Volumes in Kubernetes
So you have a db container set up in Kubernetes (nice job by the way), but all of your data dies with the associated pod! Yikes! Thankfully the Kubernetes gods have been merciful and have provided us…
ElasticSearch: Zero downtime reindexing
The lack of modification of mapping for existing fields is one of the drawbacks of the ElasticSearch. Once the mapping is created for a field, it is not possible to change it unless it has been…
QA automation in Carsguide
With the implementation of Quality Assistance, the QA team is getting more time to perform the automation scenarios. Most of the technology team mates know what is automation and why we are doing…
Musings of a Hack Day #3
A few weeks ago we ran the second Hackathon event of the year here at Autotrader/Carsguide. It’s an opportunity for cross-functional teams to form, run at a business challenge at speed and then…
AWS re:Invent — Midnight madness launches Robomaker
Day 0 at AWS re:Invent and Amazon have kicked off the party/conference with an impressive midnight party. Not your normal party; a lot of grown adults eating chicken wings, a video commemorating said…
Visual validation and Applitools
One of the QA initiatives for me in the Q4 was to research and find out the possibility to implement new testing methodologies in Carsguide. From a subsequent research,one thing identified as an area…
Why vs Why now
I recently read an article recently that said teams should ask “why now” instead of “why” when making large product and engineering decisions. When the question of why we need a “feature” is asked I…
Kids == less efficiency?
After reading Tom’s blog post on how he worked with interruptions, I feel compelled to share how I handled some life-changing interruptions I have faced in the past few months. Having recently…
Launching a product on time
The engineering team at carsguide/Autotrader recently launched a new product on time, on budget and with a larger feature set than the business was sold. It was a ground up build from a blank page…
ES5 vs. ES6 Syntax
EcmaScript (ES) is a standardised scripting language for JavaScript (JS). The current ES version supported in modern browsers is ES5. However, ES6 tackles a lot of the limitations of the core…
Launching Autotrader
Launching Autotrader has been a journey — one that was longer in planning than it should have been but what a journey it has been. From new ownership which gave us access to represent the brand in…
Front end component design principles
Having used React for just over 3 years at my previous job, I recently started working at a company that uses Vue. While it was true that there was much to learn when switching between front end…
Interruptions == less efficiency?
Until recently I always considered interruptions a massive blocker for my productivity, for as long as I can remember those around me preached that it impacted their development efficiency and so…
The launch of Autotrader is just the start!
Autotrader is now in Australia, and while that in itself is big news, we would like to take a moment to step back from the launch-related communications to talk about the bigger picture and where to…
Teams #2
At the turn of last year I first wrote about what we were building, how we did it and some of the key things we look at when it comes to identifying whether the team has a solid core. In the 10…
Istio, Drivetrain and the Boundary of Software
Last week I was at the Google Cloud Summit. Carriageworks is a great place that gives the event a hint of ‘industry revolution’ feeling. Our technology team is in a similar theme recently — the…
Build/Buy/Partner
When presented with a customer problem to solve through technology, the age-old question when it comes to engineering & product and one that can exert a heavy influence on the success of a technology…
Javascript context : ECMAScript
Javascript has an interesting background and foundation. As with a lot of other programming languages, it has a specification: an official standard which defines its syntax and semantics. Yes that’s…
Drupal web services with JSON API
At carsguide.com.au we are running a fairly static Drupal 7 to power the editorial part of the website: we are building fast and SEO-optimized pages and visitors are landing on our pages from a…
Some effective testing tools we use in Carsguide
One of the numerous positive things about our company is the opportunity of trying different tools and technologies in the market without much overhead of obtaining the approval from the higher…
Platforms, not products
Back in 2016 when I joined I was excited to be joining a product company working in the B2C space — the prospect of distinct products that solved for specific customer problems was exactly where I…
Music to work to
I love listening to music while I’m working. I love to zone out, remove the noise of clacking keyboards, muttered conversations or general noise in the office and get in my own world. While I know…
Work/Life Balance
Work/life balance is one of those things that everyone talks about but not everyone has or knows the meaning of. To me, it means being able to segregate my brain and emotions between work mode and…
Going all in with Kubernetes (Part 2)
If you haven’t already read part 1 of the series, our engineering team have gone all in with Kubernetes and I can comfortably say we are well on the way to having a production ready infrastructure…
First look at Vue UI
I’ve just spent the better half of the day playing with Vue UI and I have to say it’s pretty damn cool. I’ve been working with Vue on my last few projects and while it’s still fairly new to my…
What is NewRelic, and why operations and developers should all be looking at it
Well well well, just to set the theme straight here right at the beginning, I do not usually advocate for commercial products out there. I believe the number of tools available for a technical task…
Ruthless Prioritisation
Sequencing and prioritisation is omnipresent in our lives — from our personal to our professional and everywhere else in between. The ability to successfully trade off pros and cons and sequence…
Injecting a Credit Card into my hand
When I was 23 I wanted to be one of the first people to have a credit card in their hand. I had heard about syringe kits that could be used to inject an NFC tag (the chip in your credit card used for…
Engineering Effectiveness #3
This is the third iteration of how we go about planning our engineering effectiveness initiatives — on the back of #1 and #2. We’ve been able to demonstrate it works — it provides context, it’s…
Review of an ARM-based cloud server
As a web developer I have the opportunity to work with a lot of different hosting providers. The good, the bad and the ugly. In this post I’m sharing my latest experiment with an ARM-based (as…
Hosting a meetup
Last month we had our first go at hosting a Meetup in our shiny new offices after a refurb. There was a lot to do from an organisational perspective but the team banded together and in the end we…
Domain Knowledge
I was chatting to an ex-colleague recently who works in sports and the question came up around whether you need to be into sports to work in sports? One of his senior leadership had raised a query…
The 7 line rule
As a junior developer one of my first projects was a monolith. It didn’t need to be, but it was. The code wasn’t just spaghetti, it was fettuccine, and linguine all mixed into the same bowl. The…
Driving Forward
Getting from A to B in a car or some other form of vehicle typically involves moving forward, navigating traps and pitfalls successfully, braking occasionally but more importantly using the…
Swapping to CSS Grid
The last few weeks I’ve been digging around to see what other frameworks can compare to Bootstrap. Bootstrap has always been my go to CSS framework for building layouts, as it always seemed to be THE…
How to measure the success of retrospective?
“At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.” The purpose of the Prime Directive is to assure that a retrospective has…