Technical Architecture Decomposition

That Developer Dad
2024-06-13

This article introduces the concept of Technical Architecture Decomposition (Tech Decomp), a detailed design technique to help developers understand and estimate the scope of work accurately. It outlines when and how to use Tech Decomp, emphasizing its benefits in managing cognitive load and improving project planning.

“EUGH!!! What’s that smell???”
“Shhh! The Architect is Decomposing!”

Let’s talk about Technical Architecture Decomposition.

It’s a mouthful. I think to save keystrokes, I’m going to shorten it to Tech Decomp while we discuss it here. Other authors and sources have called this technique “Detailed Design.”

This is a tool we can use to help our developers understand the scope of a proposed body of work, which in turn lets them give more accurate estimates to each discrete task described within. Once the work begins, it promotes better focus on each discrete part of the project.

Tech Decomp does require an investment of time, but when I’ve used it, it’s paid off in the ways I just described. That said, if you explain what you’re doing and get your other developers on board, it scales wonderfully, and gets them thinking in terms of “what exactly do I need to do to make this change?”

Let’s get into the details.

Why?

If the request is to center a div, that automatically gets 20 story points. No discussion, no tech decomp needed. The largest of the XXL T-shirts should be ordered.

Why Not?

When?

What?

With practice, this analysis and documentation shouldn’t be overly time intensive. I’ve done Decomps of 8 point stories in an afternoon. This is all subject to familiarity and cleanliness of the codebase, of course. A tightly coupled monolith, or an overly distributed microservice system are going to require a more involved analysis than a cleaner architecture.

Who?

Where?

How?

  1. Find the “entry point” to the system where the change will manifest. This usually lives either in the UI or the public API.

  2. Trace from that entry point through to the resource access code, keeping notes about each component in the system that must be touched when making this change.

  3. Do a second and sometimes even third pass, looking for secondary and tertiary parts of the codebase that will have to change.

  1. Once you’ve got your list, get it organized into discrete tasks. Don’t give the answers away, just point the developer to where they need to go and give them a general idea of what needs done. (Don’t write the code changes for them, basically.)

Those emphasized bullet points should set off your Spidey Sense. When I get to those places and discover the requested change will incur wide-reaching code changes, I prefer to back away and discuss with the people that made the request. If your work package changes from touching a single service or subsystem to affecting multiple areas of the system, it’s no longer a single “User Story” and requires much more careful planning, sometimes even coordinating with other teams.

The good news about your Spidey Sense starting to tingle is that you’ve found an opportunity to improve the system’s architecture. It may well turn out that redesigning that part of the system into a more suitable architecture would cost less time than making the change “as written.”


Final Thought

And there’s our overview of the Technical Architecture Decomposition concept. Keep in mind that this isn’t the only answer, and I don’t intend for it to be interpreted as “The Way.” This technique is A tool for your workshop, to be pulled off the shelf and used when it will help with specific tasks.

Happy Coding!

Topics in this article:

accuracy 2

architecture 4

communication 3

design 2

detailed design 2

estimates 2

managing complexity 2

planning 3

project planning 2

software development 1

technical architecture decomposition 1