Theory of Constraints in software development


In the first book about Theory of Constraints named “The goal: a process of ongoing improvement” the unit of manufacturing chain is a machine tool. In software development we should consider that chain links are people who are involved in development process, i.e:

  1. The client
  2. Product Owner
  3. Project Manager
  4. Designer
  5. Software developers
  6. Testers and QA people

As we know from the Theory of Constraints “the throughput of any system is determined by one constraint (bottleneck)”. For software development this means that very often the project depends on one person only. The throughput of the weakest chain link is equal to the throughput of the whole system, together any delay in sequential manufacturing is the delay for product delivery. Usually only development of different parts of the application, f.e. of mobile application can run in parallel:

  • Back-end
  • Front-end
  • Android application
  • iOS application

Anyway, running development in parallel does not mean that some parts of it are not dependent, i.e. client side is always dependent of server-side. You should always supervise the progress of back-end developer  because his work must be optimized for client developers. Developers should wait for back-end developer work done but they should not adapt to back-end developer work too much because such work style will bring the team to new bottlenecks. So the work of every developer in the team must be optimized. At ZeeSofts we perform such adaptation with:

  1. Best practices of development – if developer does not follow best practices – this means that he is the bottleneck.
  2. Technology – if we have a technology that is able to accelerate development  (improve the speed of development without loosing the quality or improve the quality without loosing the speed) but applying of such technology in a chain link depends on small changes of work of previous chain link ( f.e. back-end developer or designer) and he (previous chain link) does not adapt his work  – the previous chan link is the bottleneck.

There are other ways of optimization of development process exist. You should also consider that chain links should not pull the work from the previous chain links because the work of different chain links requires different skills. F.e. if a developer is fixing designs made by designer – you should know that you have a big problem in this bottleneck and this bottleneck consists of several constraints, not only one or two constraints:

  1. A designer was not in time with his work to satisfy developer – Сonstraint №1
  2. A developer does not do his work – Сonstraint №2 – the company looses profit
  3. A developer pulls designers work and do some design fixes – Сonstraint №3 developers will do design job slower several times
  4. A developer pulls designers work and do some design fixes again – Сonstraint №4 instead to hire one more designer a developer does other’s work – company looses money to pay to wrong worker

Together this constraints create tightly coupled bottleneck which should be optimized the fastest. Until you know how to dynamically optimize the bottlenecks your company will always be in the bush league.




Sequential project lifecycle is used in Waterfall methodology. The requirements are collected , then the design is approved, then back-end development starts and then client apps development start. Such projects last 3-5 times longer than Agile projects and clients do not like long terms. The Agile style can help us to reduce development time but not the costs because this style of development supposes to start work all chain links almost in parallel. It reduces long sequential project lifecycle to the series of short sequential lifecycles called “sprints” where small job of previous link is delivered to the next link in shorter time, f.e. one design screens it dispatched for development right after it has been completed. But such connections and work style can call to much more tightly coupled bottlenecks, so Agile style of project management requires much more attention to the bottleneck and team balance. Also the client should be responsible avoid delays with his feedbacks.




There is another situation which requires your attention. When a company has several projects on support phase or update phase of development – every developer is being assigned a task stack with tasks for several projects. Project Manager should be very skilful and know how to set priorities for every task to have all deliveries in time to satisfy clients.



It very easy to get confused with several projects when every developer is overloaded. To avoid this you should set tasks and projects priorities and then inline all tasks into the task flow with single line for every developer/team of developers/development unit.