Lunar lander software developmentDecember 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:
- do you get regular, iterative designer feedback?
- do you have clear vision, goals and deadlines?
- and are the engineers competent to keep the codebase from falling apart?
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.