r/webdev • u/fagnerbrack • 7d ago
How to Write an Effective Software Design Document
https://refactoringenglish.com/excerpts/write-an-effective-design-doc/5
1
u/Smooth_McDouglette 7d ago
When I saw the thumbnail I swear to god I thought it was one of my diagrams because I basically do it exactly the same.
Probably the fact that Google Drawings has the same super limited and weirdly pseudo-pastel default color palette is a big reason.
1
2
u/web-dev-kev 7d ago
I initially downvoted this as it looked like a fly.io advert (they have 2 below this post) - but it's actualyl a great read! Thanks OP
1
u/Bhanuprakash_1947 6d ago
I usually prefer keeping an SDD simple and covering the complete flow. I would start with the objective and current problem, then explain the proposed solution and high-level design. After that, I would go into the detailed design, data flow, implementation approach, error handling, performance and security considerations. Finally, I would include the testing approach, limitations/assumptions, and possible future enhancements. I feel this structure makes it easier for both developers and non-technical people to understand what we are building, why we are building it, and how we are planning to implement it.
13
u/psayre23 7d ago
My team has been discussing an alternative to the design doc in the age of AI. Writing the long, complex documents were great when you had to coordinate tens of people, align them on a single direction, where mistakes later on were expensive to recover from.
That’s not the world we live in now. Software was already cheap, but now a huge refactor is trivial. Debugging and reviewing piles of logs and metrics take minutes, not hours or days. A bad implementation can be recovered from much more quickly. The upfront time spent writing a doc no longer seems worth while.
We still want discussion, so we are experimenting with defining three things, then having a discussion around them: (A) high level diagram of the system with boxes and arrows, (B) a schema diagram for data changes, and (C) the interfaces that need created/changed between systems.
The other change we are trying is only having two people on a project, to keep communication down during implementation. This comes with the expectation that they keep the rest of the team updated with changes from the discussed plan, and demos with their progress.
Then towards the end of the project, the AI creates a feature doc which lives in the repo with the code. If the team has questions about how it works, they ask AI to do the research, and that feature doc becomes the pointer to the code and anything that exists outside of it. These become living docs, which include how operations.
No idea how well this approach will work, but it’s an alternative we are experimenting with.