🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

Lunar lander software development

December 17, 2020 in Engineering philosophy

A successful software product is a compromise between three ideals: architecture, usability, and vision.

They’re like three rocket boosters on a lunar lander. If you want to get anywhere, make sure the boosters are balanced.


Apollo Lunar Module-5 Eagle, public domain

Each ideal has their own driver: engineer, designer, product owner.

The engineer cares about a simple, robust and extendable implementation. A worthy goal, but not bringing any value on its own.

The designer cares that the product is clear, easy and pleasing. This always comes at a cost of internal simplicity.

And the product owner cares about ship-ship-shipping the right features at the right time. This always means the engineer cannot finish their refactoring, nor the designer their refinements.

So unfortunately, the team members often see each other as obstacles, despite everyone having the same end goal - a successful software product.

In a good team, all sides are represented and cooperate to balance the pull in every direction:

If you’re missing someone, it is not enough to do your own part harder. You’d be overcompensating in the wrong way. Instead, you either consciously take on more than one role (so for example, Railsware has product engineers), or seek external help.

If you’re solo, take care to wear each hat some of the time.

And finally, when all ideals are balanced, you stick the landing, and get a successful product that is appreciated by its customers.

Buy me a coffee Liked the post? Treat me to a coffee