My Path to Financial Independence as a Software Engineer

One of the watershed moments of my life was as a 20 year old intern attending a workplace presentation about personal finance. Over the course of one hour, I learnt about the power of buy-and-hold investing and compound growth. I learnt that even an average engineer with a five-figure salary can become a millionaire by … Continue reading My Path to Financial Independence as a Software Engineer

Mutation Driven Testing – When TDD Just Isn’t Good Enough

As someone who loves discussing Software Craftsmanship and best practices, Test Driven Development (TDD) is a bit of a sore spot for me. Let me start off by saying that I love TDD’s emphasis on testing. Too many software projects skimp on testing. And the results speak for themselves many years down the road, when … Continue reading Mutation Driven Testing – When TDD Just Isn’t Good Enough

Why Is There So Much Crap Software In The World

All around us, we are surrounded by crappy software. Pension funds that are stumbling along using decades old batch scripts with faulty assumptions. Credit agencies have leaked over a hundred million social security numbers and other confidential data. Planes need to be rebooted every 51 days to prevent "potentially catastrophic" bugs.And not to even mention … Continue reading Why Is There So Much Crap Software In The World

If Founders Treated Their Investors The Same Way They Treated Their Employees

Founder: Hey Joe! How are you doing? Everyone here loved meeting you, and we would really love to have you on board as our investor! We really respect your expertise, and think this could be a great partnership. What do you say? Investor: Glad to hear! Can you give me more details about how much … Continue reading If Founders Treated Their Investors The Same Way They Treated Their Employees

The Birth of Legacy Software – How Change Aversion Feeds On Itself

Here's a common pattern that I see play out very often in software teams: There is a need to change the existing system behavior to accomplish new functionality.  The software engineer looking at the task realizes that the existing design isn't well suited to the change needed. They suggest design changes and refactoring, as part … Continue reading The Birth of Legacy Software – How Change Aversion Feeds On Itself

Abstractions Are In The Eye Of The Beholder

One of the most common debates I see, is on the right level of abstraction to use when coding. The line between over-engineered and unnecessarily-verbose is a very fuzzy one, and is the source of never-ending debates. Unfortunately, this debate is unlikely to ever get resolved. For one simple reason. The correct answer is both … Continue reading Abstractions Are In The Eye Of The Beholder