The structure I prefer for a technical design document is like a three-layer onion.The first layer is the problem statement, goals, non-goals, and requirements, both functional and non-functional. The next layer is the functional specification, which describes precisely how the system will work from an external perspective. The third and final layer is the technical specification, which describes the internals. Each…
This + Layer one also explicitly identifies stakeholders, and describes the current (AS-IS) situation with annonated screenshots so everyone quickly sees what we are talking about. Layer two also lists alternative solutions considered and why not chosen. Layer three is developers making a few notes on chosen tech design, most important is the choice reasoning here. In all layers, add and use references. Less is more,…
Writing a good design document
141–150 of 152 posts
Re: Writing a good design document
#142> The goal of a design document is to convince the reader the design is optimal given the situation. This is a nitpick, but I don't think the goal of a design is to be optimal so much as sufficient . Software systems design, like any design, is about coping with constraints and tradeoffs. The design doc should clearly lay out these out and present an approach that meets the requirements and constraints with acceptabl…
Isn’t “making acceptable tradeoffs” (optimization) while “meeting requirements & constraints” (under constraints) simply optimization under constraints? I fail to see how this is about sufficient _but not optimal_ solutions.
For example, suppose you are designing a network service to meet some use case. Yes, it needs to meet the use case, but there are other things you care about like simplicity of the code, latency, cost to operate the service, and others.
For any design you propose, there might exist an alternate design that is strictly better by some criteria-maybe it works exactly the same but has much better latency characteristics. If an oracle gave you this design, you might agree it was more optimal and choose to implement it, but I don't think it means you failed if you come up with a (sub-optimal) design that solves the problem within the constraint.
Re: Writing a good design document
#143The structure I prefer for a technical design document is like a three-layer onion.The first layer is the problem statement, goals, non-goals, and requirements, both functional and non-functional. The next layer is the functional specification, which describes precisely how the system will work from an external perspective. The third and final layer is the technical specification, which describes the internals. Each…
Re: Writing a good design document
#144The author makes the following assertion: Let me illustrate a common code organization issue some programmers run into on their first day. The novice writes terminal.print("Hello world") Then they decide they want to make the text red, so they edit their program to terminal.print("Hello world") terminal.setPrintColor("red") And then they're confused that it didn't come out red. They haven't internalized that the firs…
Re: Writing a good design document
#145> The goal of a design document is to convince the reader the design is optimal given the situation. This is a nitpick, but I don't think the goal of a design is to be optimal so much as sufficient . Software systems design, like any design, is about coping with constraints and tradeoffs. The design doc should clearly lay out these out and present an approach that meets the requirements and constraints with acceptabl…
Re: Writing a good design document
#146Earlier quoted context omitted.
You can complain all you want on here but it's not going to change the fact that most readers including myself just glaze over them. Because as you say most are just bullshit. So keep doing it if you don't actually care. If you do, maybe try to think of a different way to communicate it that sets you apart.
I generally like it when resumes do this, and so do most people I know. I'd be interested to see surveys, I don't think it's anywhere close to universal. That said, I'm typically focused on very measurable domains (e.g. making code faster.)
The best resumes I read (and the strongest candidates) were ones which were very confident in their skills and experience. They showed a bit of personality (as much as you can).
Re: Writing a good design document
#147Earlier quoted context omitted.
> Meetings are for low-latency collaboration, not information transfer. Ok, but without a doc, collaboration in a meeting can become inefficient in many ways. Folks can talk past each other, bouncing between unclear options and losing clarity on what they are even debating. Only one person can talk at a time, so folks are sitting and waiting for their turn, etc.; Strong personalities can dominate and filibuster. Writ…
I'm arguing for reading the doc ahead of time, identifying topics about the doc to discuss, then coming to the meeting with a specific agenda. > Ok, but without a doc, collaboration in a meeting can become inefficient in many ways. Folks can talk past each other, bouncing between unclear options and losing clarity on what they are even debating. Only one person can talk at a time, so folks are sitting and waiting for…
That by simply requiring a doc, you have forced the person who called the meeting to think about what they want to achieve, and to prepare their thoughts ahead of time. This makes the agenda clear to everyone and helps to guide the discussion.
> It means that letting someone else manage your time is more efficient than managing your own time.
If we are reading the doc together in the meeting, I only need to accept/decline the meeting and I am good.
If I am expected to pre-read, I have to actively do something to schedule that pre-read time. And the doc has to be ready whenever I decide to read it. Multiply that by 10+ meetings a week for a busy manager, and you have a lot of mundane scheduling work to keep straight.
> If I need 5 minutes to read a document, how is it helpful for someone to force me to sit for 10 minutes to read it at a specific time?
I’ve not found that to be a problem in practice. I can use extra time to think and prioritize my feedback, or catch up on Slack, etc.
Re: Writing a good design document
#148Earlier quoted context omitted.
> Replace adjectives with data I think this idea got so pervasive all throughout tech that all the resumes that i now get are filled with so many numbers that i don't even know what to make of them.
If I get one more resume from a “seasoned professional” who has “decreased X by N%” I am going to close hiring, quit tech, and go be a hermit. N.B. I received such a resume while typing this comment and am absconding to Outer Mongolia as I type
Re: Writing a good design document
#149The structure I prefer for a technical design document is like a three-layer onion.The first layer is the problem statement, goals, non-goals, and requirements, both functional and non-functional. The next layer is the functional specification, which describes precisely how the system will work from an external perspective. The third and final layer is the technical specification, which describes the internals. Each…
That still requires the rest of your process, and perhaps even places more emphasis on those documents. The infrastructure implementation needs to follow from the high-level technical design which needs to follow from the functional specification. Because as you say, the implementation needs to be reviewed against a specification. What are you reviewing if the spec is incomplete?
Re: Writing a good design document
#150Earlier quoted context omitted.
I'm going to have to read that MF.com link fully and properly but I can't help but notice this: "That’s it. That’s the Advice Process in its entirety." (speak to everyone involved). Presumably anyone with the term Managing as a prefix in their job title is expected to glaze over at roughly this point. Then we get to the meat: "The four supporting Elements". So I try to find out about ADRs: I follow the first link: ht…
There are so many external links, it's easy to get lost in this article. Look under content for the section titled "1. A Thinking and Recording Tool: Decision Records." It's under "The Four Supporting Elements." Here's a direct link if it's easier https://martinfowler.com/articles/scaling-architecture-conve... (Just search on that page for "The Four Supporting Elements) There Harmel-Law defines ADRs as "lightweight d…
I do like to wrap up ... eventually! 8)