Discussion about this post

User's avatar
Antonino Rau's avatar

I love the analogy! ❤️

When using an analogy, it's important to elicit the differences, otherwise it's not truly an analogy. One notable difference that comes to mind is malleability. Additionally, user needs and software instability seem to be closely linked, as users may not realize if the abstraction is good until they actually use it. These differences illustrate the opposing aspects of the soft vs hard design in place here. For instance, until a user interacts with your api, it's impossible to know if the data structure (which shapes the interface, much like a plug shape in the analogy) is truly useful.

The flexible nature of software means that design changes often occur during the coding phase, and these changes may not receive the same level of review as high-level design changes. This can result in important modifications happening without the necessary attention. Due to the malleability of software, it can be challenging to maintain a high-level design throughout the building process. This creates a more fluid and less straightforward development process compared to designing hard artifacts.

Expand full comment
Huy Trinh's avatar

I love it!

Part of my job now, before implementing a new feature, I was asked to write a technical design docs. Honestly, I don't know where to start and this post is super useful. I should focus on the boundaries and ignoring the implementation details in the design.

Do you have a template or how to write a good technical design doc that we can share/present to other devs?

Expand full comment
3 more comments...

No posts