A famous quote, the author escaped my mind, goes like this:
Scientists find problems, engineers solve problems. In that sense, I
like engineering. Solving real problems for real people. But some jobs
are meaningless (see Graeber’s bullshit jobs).
The goal of your work can be bullshit, or the process of getting there
(or, as in in my case, both). It took 20 years until it dawned to me
that I wasted a great part of my work life with bullshit, because I was
deluded by cool technology. Okay, that BS word is overused and will stop
to use it now. Of course, it lies in the eye of the beholder what counts
as it and what not. I think it is good advise to be conscious about your
values/goals and let those steer your career (and the rest of your
life).
Now, to the real part of what I wanted to express; my model of
engineering.
Engineering is a battle of the mind against the complexity, chaos and
entropy of the universe. An endevour to bring purposeful order that
upholds against reality.
Here’s my (software engineering) process:
Understand the problem, including its environment. Build a mental
model of the problem domain and its environment. Read. Talk to people
involved.
Let your rational mind and your gut feelings criticize it. It should
be as simple as possible (simple is not easy) and feel elegant. If not,
go one step back.
Understand the solution domain and your tools, find new ones, if the
ones you have are not sufficient.
Always ask yourself, what could go wrong and adjust your solution to
be more robust.
Feedback on all levels and from all stakeholders (including
yourself) is paramount. Embrace anything that challenges your mental
model and implementation (tests, simulations, annoying colleagues,
users).
Start the implementation as early as possible (prototypes, MVP,
agile, tracer bullet) to get feedback from the realisation of your
design itself. It is not something that mechanically follows from an
upfront design, most of the time it is unexplored land. Hic sunt
dracones.
Let your mental model of the problem, the solution and its
implementation co-evolve,
until it is “good enough”.
“Perfection is achieved, not when there is nothing more to add, but
when there is nothing left to take away.” - Antoine de
Saint-Exupéry
If you encounter a problem that cannot be solved by hard thinking,
either explain it to somebody (the solution then often becomes obvious)
or take a break (silent)/wait until the next day. There’s a background
process in your mind that will solve it for you.
Reflect and learn from the mistakes for the next attempt.
Earn a lot of money for the good work you’ve done and be satisfied
with the value you created for others.