There seems to have been a lot of talk around me lately in relation to “dev boxes” and “testing on staging”. After unsuccessfully trying to convince folks of why I think this is a bad idea from both an engineering and business perspective I decided it was time to talk code. In this repository I[…]
Please enjoy my new post on the Grab Engineering blog
When I tell people, “No transactions!” their first reaction is either “he’s mad” or “for my use-case its necessary”.
I know this was my reaction when it was first said to me.
I happened to be working on a money based system at the time; something you would think that is the very definition of a system that “must” use transactions.
As engineers we are instinctively drawn to things that are “right”, “clean” or “correct” and we are therefore attracted to the warm fuzzy feeling we get from using ACID compliant transactions.
We happily use SQL transactions with the knowledge that our data will always be perfectly clean and neat.
However, should you ever need to build a system that truly scales, this same perfectionism will kill you.
In order to get the maximum possible performance out of your system, you might just have to do something uncomfortable and sacrifice “correct” on the altar of performance.
Ever hear the expression, the punishment should fit the crime? How about, a proportionate response? How about, to a man with a hammer every problem looks like a nail? Now, I’m not trying to implying that your code is a crime, though it may very well be. But do you, a professional software coder really[…]
If you “write code” for a living, chances are you have a one time described yourself as a “Software Engineer”. And chances are, you are not. Personally, I graduated with an Engineering (Software Systems) degree and have frequently and proudly described myself as such. But, only after “slinging code” for a lot of years have[…]
Last week I was privileged to give a talk to the Singapore Gophers meet up held at the GrabTaxi Singapore Tech Office. The talk was titled “Dependency Injecting (and Testing)” and was inspired by this great article by Karl Seguin. In it I discuss how you can use DI to test and a simple trick to replace[…]
I found a lot of my code (particularly the tests) had code that looked like this: Then I was reading yet another great post from Karl Seguin and I noticed there was a much better (sexier) way. Thanks again Karl!
All Golang programmer’s are aware of how great “go get” is but until today I had not given much thought to how exactly it did or didn’t do. Some background; today one of my builds (in Travis CI) suddenly broke in a way that made no sense. After some quick debugging it became obvious that one of[…]
Recently, a friend joined me on one of my projects. As it was the first time we were actually coding on the same project I wanted to tell him my coding philosophy to make sure that he felt empowered, engaged and connected to the code. Then I realised that despite the fact that a lot[…]