https://tidyfirst.substack.com/p/the-trough-of-despair Software Design: Tidy First? SubscribeSign in Share this post [https] The Trough of Despair tidyfirst.substack.com Copy link Facebook Email Note Other The Trough of Despair The price of improving structure [https] Kent Beck Jun 19, 2024 51 Share this post [https] The Trough of Despair tidyfirst.substack.com Copy link Facebook Email Note Other 8 Share Things always get worse before they get better --The Sad Truth of Software Design (also lots of other activities) You have a design. You need it to be better at supporting new features. How do you get from here to there? [https] Here's the Sad Truth of Software Design--it always gets worse before it gets better. We can ignore the Sad Truth, try to leap directly to the better design, but reality always gets a veto. Leaping creates risk. Software design improvement always looks like this: [https] 1. We got to the design we have by (attempting to) improve the previous design. 2. When we set out to improve the design, things will always get worse before we see improvement. 3. We choose the size of the steps we take to get, eventually, to improvement. It is the designer's job to envision the desired state. It is also the designer's job to design the shape of the curve, subject to reality's annoying veto. Vision The obvious job of the software designer is to imagine what a better design would look like. The key question for the designer is, "What would the system's structure need to be so that would be no harder to implement than necessary?" (It's a bit surprising when designers don't ask this question, instead simply asking, "What should the design look like?"--for what purpose?) How high do you reach? You as a designer have a wide range of options. [https] But this is only the beginning of the designer's job. [ ] Subscribe Worse That initial dip is the price you inevitably pay for improvement. If you built a factory you'd expect to pay first, see widgets later. How much you pay & when, how many widgets you see & when, those are the parameters that determine whether you've made a good investment. So with software design--how much you pay & when & how many features you see & when, those are the parameters that determine whether you've made a good software design investment. First you have to get through the Trough of Despair: [https] This is the period where everybody but the programmers are saying, "Why are we slowing down? We need to go faster, not slower." The Trough is characterized by 2 factors under the influence of the designer: [https] How much worse is it going to get? How long is it going to get worse? The designer might decide to reach for a lower eventual goal in order to rein in how much & how long things are going to get worse. Better The Trough isn't infinite, at least if you remain employed. Eventually the design gets better. The key factors under the software designer's influence are: * How soon until things are at least better than they were? * How quickly do things improve after that? [https] The designer can't fully control either factor, but they can change the sequence of the project to change time-to-first-value and rate of improvement. Steps The final factor under the designer's influence is the step size of the transformation. How much of the design will be changed between (for example) deployments. (The Empirical Software Design answer is, "Tiny steps. No, smaller than that. Then get good at taking steps quickly.") [https] Succession All of these factors add up to the design skill I call "succession". For a desired end state: * What are the steps to get to that end state? * How are the steps ordered? Software designers can influence design transformations by: * Choosing the improvement in structure based on what features are coming, how certain those features are, how cheap they need to be to implement, & how the organization will react to the design transformation, especially the Trough of Despair. * Choosing a succession to make the "getting worse" phase acceptable. * Choosing a succession to make "how much worse" acceptable. * Choosing a succession that achieves first value in an acceptable time, and for the "right" features. * Choosing a succession that achieves acceptable rate of improvement. * Choosing a step size that balances risk, human factors, & overhead. Software design isn't just designing software. Anyone who says different is selling something. 51 Share this post [https] The Trough of Despair tidyfirst.substack.com Copy link Facebook Email Note Other 8 Share PreviousNext 8 Comments [https] [ ] Donald Parish Jun 19Liked by Kent Beck I always try to do incremental steps if I can. Less chance of [https] breaking things, and if they do break, easier to know what broke it. Expand full comment Reply Share 1 reply by Kent Beck Ben Christel Ben's Guide to Software Develop... Jun 20Liked by Kent Beck [https] Are tidyings immune to the trough of despair? Or do they just make it so small that it's hard to notice? Expand full comment Reply Share 3 replies by Kent Beck and others 6 more comments... Top Latest Discussions No posts Ready for more? [ ] Subscribe (c) 2024 Kent Beck Privacy [?] Terms [?] Collection notice Start WritingGet the app Substack is the home for great culture Share Copy link Facebook Email Note Other This site requires JavaScript to run correctly. Please turn on JavaScript or unblock scripts