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.

5
  • 5
    The book is about "software construction". The title of Chapter 5 "Design in construction" just means "Now we're going to talk about detailed design within the context of software construction (same as before), but we're going to dedicate an entire chapter to it". It's not a new concept, just an elaboration of the kind of design that is relevant for the scope of the book. Detailed design is opposed to (or is a refinement of) a kind of high-level, broad-strokes design that you might do earlier in the process, before you start making stuff. Aug 14, 2023 at 13:31
  • 5
    There is no industry-standard definition for either of those phrases. The author(s) of the book are the best people to define these terms. As such, this question attract opinion-based answers, which makes this a poor fit for this community. Aug 14, 2023 at 13:37
  • 1
    Starting on page 82 of the 2nd edition, several different levels of design are explained on a few pages. From what you wrote, it is not clear to me what parts of that explanation you have trouble to understand, and where we could provide a better explanation than the book already does.
    – Doc Brown
    Aug 15, 2023 at 4:20
  • @DocBrown, do I understand correctly that the author in Chapter 5 describes the design phase in general, which intersects with the design of architecture? It is confusing to me that the author describes that at the design stage of the architecture the main classes are already defined (in Chapter 3.5, next to the enumeration of the main components), and then says that the design of classes and methods is determined by the architecture, so to speak.
    – user433560
    Aug 15, 2023 at 9:04
  • Well, design activities on different levels typically overlap to some degree (see, for example, p.35). Moreover, it depends heavily on the size of the system what one calls "architecture". Citing from chapter 3.5 "Depending on the size of the program, each building block might be a single class or it might be a subsystem consisting of many classes. ". We typically don't define an architecture of a system and set it in stone. Even when we do low level design in a larger system, we can still find corrections or additions or focus-shifts in the architectural design.
    – Doc Brown
    Aug 15, 2023 at 9:34

2 Answers 2

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.

-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.

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.