Project Design in Software Delivery: An Engineering Approach
Project Design brings an engineering approach to software projects. It enables Predictability through clear planning, accurate estimation, and strong collaboration between architect and PM. Learn how Code Design and Training improve delivery outcomes.

I first encountered Project Design during my IDesign Training as an architect. The concept is also thoroughly discussed in Juval Löwy’s book Righting Software.
Even after applying it on real projects, I still find it hard to explain clearly—and even harder to convince others of its value.
At its heart, Project Design is an engineering approach to planning that aims to deliver on time and within budget. For teams unfamiliar with a truly engineering-led method of planning and running software projects, it often sounds too good to be true.
Many dismiss it outright, calling it “waterfall” without understanding what it actually is.
What Does Project Design Mean?
Just as you Design a software system, you also have to Design the project itself.
Project Design includes:
- Accurate Estimation of Duration and Cost
Done like an engineer would: no guesswork or wishful thinking, but clear calculations based on realistic assumptions. - Building Multiple Executable Options
Each option considers staffing levels, team skills, milestones, and business goals. These options will differ in time, cost, and risk—giving leadership the ability to choose deliberately. - Validating the Plan
Can this team really deliver this plan? Would I be able to do it with these people? The plan must match the team’s real capabilities.
Who Is Responsible for Project Design?
This is the architect’s job—not the project manager’s.
The architect works closely with the PM, but takes the lead in making the plan. It's an engineering process with trade-offs, calculations, creative solutions, and constraints. Fundamentally, it’s about making informed decisions.
Project Design vs. Project Management
Project Design is to project management what System Design is to coding: it’s the blueprint.
Architecture is the design of the system; coding implements it. Similarly, Project Design is the plan for how the project will be executed, and project management is the actual execution of that plan.
How Does Project Design Work in Practice?
Project Design builds on System Design. The system architecture describes what needs to be built and the technical dependencies. From there:
- The architect and PM identify all activities and their dependencies.
- This is turned into an Activities Network Diagram—a visual representation of the plan.
- Analysis and calculations are done on this diagram to support better decisions.
- Staffing requirements are planned in detail.
- The result is a clear, actionable set of “assembly instructions” for the project.
The Lego Analogy
Think about a Lego set. The picture on the box shows the finished model. The bags of bricks give you the parts. But neither is enough.
What you really need is the assembly guide—the instructions telling you the sequence to put pieces together, what can be done in parallel, and how components fit.
Project Design delivers these assembly instructions for software projects: defining the order of work, identifying parallel tasks, integration points, and dependencies. Architecture alone isn’t enough.
Tools and Monitoring
A well-done Project Design equips project management with:
- A plan they can actually track.
- Tools to detect when execution is off-course.
- The ability, together with the architect, to take early corrective action and avoid big delays.
The Value of Project Design
Project Design takes practice and learning to master. But even partial use of this approach can greatly improve predictability in delivery.
Bringing Code Design discipline to project planning makes it far more likely to deliver successfully, on time, and on budget.
Drawing from our extensive project experience, we develop training programs that enhance predictability and reduce the cost of change in software projects.
We focus on building the habits that make developers adopt the industry best practices resulting in a flexible code design.