5

I am currently reading Code Complete. And I was confused when the author in one case uses the term "detailed design", and in the other "design for construction". What is their difference? Or is it one and the same?

As I understand it, when developing architectural developments, it will be necessary to "apply processes", so to speak, such as class design, and the author describes a similar process in chapter 5, but already under the name design for construction.

2 Answers2

1

I was confused when the author in one case uses the term "detailed design", and in the other "design for construction".

Does he? Well, I searched through the book, and as far as I can see, McConnell nowhere in the whole book uses the term "Design for Construction".

The correct title of chaper 5 is

"Design in Construction"

and in the context of this book about software construction, this makes a IMHO a noteable difference.

To understand what that means, one first has to read chapter 1, where McConnell explains what he means by "Software Construction". There is a nice picture at page 4:

enter image description here

where the grey circle scetches the construction activities in software development. For him, software construction is centered around coding and debugging, but not exclusively formed by those activities.

Now the terms hopefully become clearer:

  • "Design in Construction" are all the design activities inside the grey circle, which are to a major part belonging to "Detailed Design", maybe also parts of "Construction planning".

  • A huge part of "Detailed Design" belongs to software construction, but there are also parts outside.

Chapter 5 explains in detail those design activities, and which of them - from McConnells point of view - belong to "software construction". I don't think I can give an adequate summary here in a few sentences, since the chapter is too large for this. So anyone who is interested may get a copy of the book and read the chapter by themselves (disclosure: I have no connection to the publisher or the author).

Let me finally add that McConnell's definition of "Design" is not the only possible or correct one. I recommend to have a look into Jack W. Reeves essays - he makes clear why coding itself is also a design activity and should be called as such, especially when software engineering is compared to other engineering and construction disciplines.

Doc Brown
  • 218,378
-1
  1. Detailed Design: This refers to the phase in software development where the high-level system architecture is broken down into smaller, more detailed components. It's about specifying the finer details of each component/module, their interactions, data structures, algorithms, and more. It's a step beyond high-level design, which might just specify the major components and their interactions. In the context of building construction, think of detailed design as the detailed blueprints that specify where each electrical outlet goes, the type of materials to be used for each part, etc.

  2. Design for Construction: This term, as used by McConnell, emphasizes the importance of designing software in a way that makes it easy to construct. It's about making design decisions with the actual construction (coding) phase in mind. The idea is to ensure that the design is practical, implementable, and won't lead to unnecessary complexities when it's time to write the code. It's analogous to designing a building in such a way that it's easy for construction workers to actually build it, considering the tools and materials they have.

While both terms deal with the design phase of software development, they emphasize different aspects:

  • "Detailed Design" is about the depth and granularity of the design.
  • "Design for Construction" is about the practicality and constructability of the design.

Regarding your point about "applying processes" like class design: Yes, class design is one of the many processes or considerations that come under the umbrella of software design. When McConnell talks about "design for construction" in Chapter 5, he's emphasizing the importance of making design decisions that facilitate easier and more effective coding.

While both terms are related to the design phase, they focus on different nuances. It's essential to have a detailed design, but it's equally important that this design is made with the construction (coding) phase in mind.