HACKER Q&A
📣 domc24

How do you approach designing and implementing software?


Anywhere from a small ticket to a new service. Is there a strict flow you follow, or is the iterative process different each time? Any rituals?

Very curious to get some new perspectives on approaching software design.


  👤 ggeorgovassilis Accepted Answer ✓
Opinions diverge largely, I'll gift you with mine. I worked in the early half of my career in an emerging market which shaped my preferences around dealing with an extreme degree of uncertainty: changes in requirements, assumptions invalidated, resource starvation, bugs in dependencies, organisational changes, badly timed management interventions etc. If you work in a mature setting, stop reading now, nothing of what I write will make sense.

Unknowingly, I self-aligned with what in India is known as the Jugaad work culture [1]. Jugaad favours extension by addition over modification. I combine Jugaad with a growth (software grows almost uncontrollably) & pruning (refactoring) complementary-phase.

In the growth phase, I build processes and software architectures that can be changed by adding something on top of the exiting system rather than modifying or removing. Test-driven-design helps me with the right decisions. I don't obsess over clean code, the test pyramid or documentation in the growth phase. Tests written in this phase serve either as a work bench (I need to run a piece of code often and don't want to wait for a deployment or server to start) or as a guard against regression. I want to move forward as quickly as I can before the bad design decisions I just made catch up with me.

In the pruning phase I refactor the code I wrote, add tests, write documentation, replace hard-coded values with configuration etc.

The reason for the two phases over a single continuous phase is that I observed a distinct summer-winter duality in projects where some times projects seem to teem with life and in others they are stuck waiting for decisions. Or put in other words: the immense pace at which Jugaad allows you to forward a project forces backpressure against business which then needs to "collect its thoughts" and gives you time for the pruning phase.

And if time/money is tight: common environment, smoke tests, then containers, then end-to-end tests, then everything else.

[1] https://blog.georgovassilis.com/2020/09/13/draft-jugaad-take...