Theory of Constraints in Software Engineering

From apppm
(Difference between revisions)
Jump to: navigation, search
(Constraints)
 
(72 intermediate revisions by one user not shown)
Line 1: Line 1:
Theory of Constraints (TOC) is a methodology invented by Dr. Eliyahu M. Goldratt, a scientist, physicist, author, educator and consultant [3]. With the methodology the most important limiting factor, that hinders a goal to be achieved, is identified and then that factor (i.e. constraint) is improved until it is no longer the limiting factor.  Since Goldratt introduced the Theory of Constraints in his bestselling 1984 novel, ''“The Goal”'', the methodology has continued to evolve and develop into many different fields including Software Engineering. <ref name="Lean"></ref>
+
''Developed by Iðunn Tara Ásgrímsdóttir''
  
The goals of Software Engineering is the creation of software systems that meet the needs of customers and are efficient, maintainable and reliable in addition the systems should meet project schedules and budgets along with being produced in an economical way.<ref name="SoftwareBOK"></ref> Applying analogous set of approaches to the development of software, one can expect the production of software that meets the goals of Software Engineering. <ref name="SoftwareBOK"></ref>
 
  
This article will introduce how Theory of Constraints can be used in Software Engineering along with guidance to apply the methodology.
+
<span class="plainlinks">[https://en.wikipedia.org/wiki/Theory_of_constraints Theory of Constraints]</span> (TOC) is a methodology invented by [https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt Dr. Eliyahu M. Goldratt] a scientist, physicist, author, educator and consultant<ref name="TOCMAN">McMullen, Jr., Thomas B. "Introduction to the Theory of Constraints (TOC) Management System", ''APICS'' Pub.1998</ref>. With the methodology the most important limiting factor, that hinders a goal to be achieved, is identified. Then that factor (i.e. constraint) is improved until it is no longer the limiting factor.  Since Goldratt introduced the Theory of Constraints in his bestselling 1984 novel, ''[https://en.wikipedia.org/wiki/The_Goal_(novel) "The Goal"]'', the methodology has continued to evolve and develop into many different fields including [https://en.wikipedia.org/wiki/Software_engineering Software Engineering]. <ref name="Lean"></ref>
 +
 
 +
The goals of Software Engineering is the creation of software systems that meet the needs of customers. The systems should be efficient, maintainable and reliable in addition to meeting project schedules and budgets and be produced in an economical way.<ref name="SoftwareBOK"></ref> Applying analogous set of approaches to the development of software, one can expect the production to be a software that meets the goals of Software Engineering. <ref name="SoftwareBOK"></ref>
 +
 
 +
Theory of Constraints (TOC) in relevance to  Software Engineering is  two folded. First of all, it is used to improve the flow of new products to the market and second determining the real value of a proposed project or a feature to the final user. The assumption is that if the real value to the user is known, then it is possible to develop the right marketing and sales approach to materialize the value to the user and the software organization. <ref name="Anderson"></ref>
 +
 
 +
This article will introduce how the Theory of Constraints can be used in Software Engineering to achieve a set of previously identified goals (projects for example). The article will also give guidance on how to apply and use the methodology in practice.
  
  
 
== Theory of Constraints ==
 
== Theory of Constraints ==
Before improving a system or any part of it, one must define system’s global goal and the measurements that will enable him to judge the effect of any subsystem and any local decision on the goal. When measurements have been defined, the constraint that limits the system to reach its goal can be found. <ref name="TOCBOK"></ref>
+
Before improving a system or any part of it, one must define the system’s global goal and the measurements that will be used to evaluate the effects of any subsystem or local decision on the goal. When measurements have been defined, the constraint that limits the system to reach its goal can be found. <ref name="TOCBOK"></ref>
  
Theory of Constraints (TOC) is a methodology that is used to identify the most important constraints in a system and then improving the constraint until it is no longer the limiting one. According to TOC every complex system consists of multiple linked activities and one of these activities is a constraint upon the whole system.  
+
Theory of Constraints (TOC) is a methodology that is used to identify the most important constraints in a system and then improving the constraint until it is no longer the limiting one. According to TOC every complex system consists of multiple linked activities and one of these activities can be a constraint upon the whole system.  
 +
=== Constraints ===
 +
Constraints are like said before, anything that prevents the organization from making progress towards its goal. Constraints can take many forms and are not necessarily only equipment. There are differing opinions on how to categorize different constraints, them, one approach is shown in the table below:
  
Theory of Constraints provides powerful set of tools to achieve the ultimate goal of companies: '''Make profit '''. Three of these tools will be introduced in the following chapter.  
+
{| class="wikitable" style="width: 600px;"
 +
|+ style="text-align: left;" | Categorized constraints <ref name="Lean" />
 +
|-
 +
! scope="row"| Constraint
 +
! Description
 +
|-
 +
! scope="row"|Physical
 +
|Typically equipment, but can also be other tangible items, such as material shortages, lack of people, or lack of space.
 +
|-
 +
! scope="row"|Policy
 +
|Required or recommended ways of working. May be informal (e.g. described to new employees as “how things are done here”). Examples include company procedures (e.g. how lot sizes are calculated, bonus plans, overtime policy), union contracts (e.g. a contract that prohibits cross-training), or government regulations (e.g. mandated breaks).
 +
|-
 +
! scope="row"|Paradigm
 +
|Deeply ingrained beliefs or habits. For example, the belief that “we must always keep our equipment running to lower the manufacturing cost per piece”. A close relative of the policy constraint.
 +
|-
 +
! scope="row"|Market
 +
|Occurs when production capacity exceeds sales (the external marketplace is constraining throughput). If there is an effective ongoing application of the Theory of Constraints, eventually the constraint is likely to move to the marketplace.
 +
|}
 +
 
 +
 
 +
Theory of Constraints provides powerful set of tools to achieve the ultimate goal of a company: '''Make a profit '''.  
 +
 
 +
Two of those tools will be introduced in the following chapter and later on explained in relation to Software Engineering along with explanation on  how to use them.  
 
=== The Five Focusing Steps ===
 
=== The Five Focusing Steps ===
 
TOC provides the Five Focusing Steps to identify and eliminate the constraints, the steps are described in the table below:  
 
TOC provides the Five Focusing Steps to identify and eliminate the constraints, the steps are described in the table below:  
Line 38: Line 67:
 
|}
 
|}
  
=== The Thinking Processes  ===
 
The Thinking Processes (TPs) are composed of cause-effect tools along with necessary condition thinking tools and a set of logic rules. When the constraint is caused by polices or behaviors, or in other more complex situations, the constraint may be harder to pinpoint, and in such cases the TPs are more useful in deciding what to change and what to change to. The Five Focusing steps focus on the constraint while the TPs focus on the factors that are currently preventing the system from achieving its goals. The Thinking Processes focus on the factors that are currently preventing the system from achieving its goals. By identifying symptoms within the system, the TPs provide evidence that the system is not performing as desired <ref name="Victoria"> </ref>.
 
  
According to <span style="color:red">Kim, Mabin and Davies </span> the original suite of Thinking Processes comprises five logic diagrams and a set of logic rules but in recent years’ development of variant Thinking Processes tools has created a need for clarity about the nature and use of such tools among academics, practitioners and particularly newcomers <ref name="Emeralda"></ref>.  Therefore, the original five diagrams will be focused on in this chapter.
 
  
Three of the diagrams that are going to be introduced use cause-and-effect logic which strives to first identify the root causes of undesirable effects and then remove the undesirable effects without creating new ones. The other two tools use necessary condition thinking: in order to achieve target A we must have B <ref name="Victoria"></ref>.
+
=== [https://en.wikipedia.org/wiki/Throughput_accounting The Throughput Accounting]  ===
 +
Throughput Accounting is TOC´s approach to accounting, a decision tool designed to ensure decisions that might have a financial impact take a holistic perspective and do not optimize one metric or area of the business at the expense of the whole system. Throughput Accounting takes a decision regarding the constraint and values it according to its financial terms. It acknowledges that the constraint determines capacity, hence profit potential of the company.<ref name="Finance"> Tarantino, Anthony & Cernauskas, Deborah "Risk Management in Finance: Six Sigma and Other Next-Generation Techniques", ''John Wiley & Sons, Inc'', 2009, chapter 21</ref> Cost accounting is known to perform gross margin analysis at the product level while Throughput Accounting determines profitability at the system level and looks at the production process as a single system that must be optimized. Irrespective of the number of units created, Throughput Accounting assumes that most production costs are required to maintain a system of production. The approach also assumes that most production costs do not vary directly with incremental production of a single product.
  
When using the thinking processes the following three questions are answered:
+
== Theory of Constraints in Software Engineering ==
# What needs to be changed?
+
#What should it be changed to?
+
#What actions will cause the change?
+
  
Examples of tools that have been formalized as a part of the Thinking Processes are described in the table below along with their objectives:
+
Theory of Constraints was first introduced in relation to manufacturing. In manufacturing the goal is to identify bottlenecks in the production line. The constraint can be found where there are queues of ''[https://en.wikipedia.org/wiki/Work_in_process Work In Progress] '' (WIP) in front of specific equipment and therefore causes extra inventories.  
 
+
{| class="wikitable"
+
|-
+
! scope="col" style="width: 50px;" | Diagram
+
! scope="col" style="width: 150px;" | Description
+
! scope="col" style="width: 600px;" | Objective
+
|-
+
! scope="row"|Current Reality Trees (CRT)
+
|The CRT is constructed from top-down, where undesirable effects are identified and traced back to their root cause with cause-and-effect logic. The CRT is designed to answer the question ''What to change?'' The tool is particularly effective tool if the constraint is a policy as opposed to a physical limitation of the existing system <ref name="Emeralda"></ref>.
+
|
+
*Provide the basis for understanding complex systems
+
*Identify undesirable effects exhibited by a system
+
*Relate undesirable effects through a logical chain of cause and effect to root causes
+
*Identify, where possible, a core problem that eventually produces 70% or more of the system’s undesirable effects.
+
*Determine at what points the root causes and/or core problem lie beyond one's span of control or sphere of influence
+
*Isolate those few causative constraints)that must be addressed in order to realize the maximum improvement of the system
+
*Identify the one simplest change to make that will have the greatest positive impact on the system.<ref name="Emeralda"></ref>
+
|-
+
! scope="row"|Evaporating Clouds (EC)
+
|When the CRT has been used to identify what to change, the EC is used to identify a solution to what should be changed to, to eliminate undesirable effects. <span style="color:red"> Two opposing needs are identified and the common goal that both are trying to fulfill, </span>
+
|
+
*Confirm that the conflict exists
+
*Identify the conflict perpetuating a major problem
+
*Resolve conflict
+
*Avoid compromise
+
*Create solutions in which both sides win
+
*Create new ‘breakthrough’ solutions to problems
+
*Explain in depth why a problem exists
+
*Identify all assumptions underlying problems and conflicting relationships. <ref name="Emeralda"></ref>
+
|-
+
! scope="row"|Future Reality Trees (FRT)
+
|Once a solution has been identified with the EC method next step is to start building the Future Reality Tree (FRT). The diagram shows the future state and identifies what to change along with its impact on the future of the organization. FRT is designed and considered to test the solution, using the effect-cause-effect method.
+
|
+
*Enables effectiveness testing of new ideas before committing resources to implementation
+
*Determines whether proposed system changes will produce the desired effects without creating negative side effects
+
*Reveals through negative branches, whether (and where) proposed changes will create new or collateral problems as they solve old problems, and what additional actions are necessary to prevent any such negative side effects from occurring
+
*Provides a means of making beneficial effects self-sustaining through deliberate incorporation of positive reinforcing loops
+
*Provides a means of assessing the impacts of localized decisions on the entire system
+
*Provides an effective tool for persuading decision makers to support a desired course of action
+
*Serves as an initial planning tool.<ref name="Emeralda"></ref>
+
|-
+
! scope="row"|Prerequisite Trees (PRT)
+
|When identification of what to change and what to change to has been done, the implementation of the solution is next. Prerequisite Trees are used to identify obstacles that prevent the solution from the EC to be implemented.  The goal is to identify the critical elements, or obstacles, standing in the way of reaching the objective. 
+
|
+
*To identify obstacles preventing achievement of a desired course of action, objective, or injection (solution idea arising from the Evaporating Cloud)
+
*To identify the remedies or conditions necessary to overcome or otherwise neutralise obstacles to a desired course of action, objective or injection
+
*To identify the required sequence of actions needed to realise a desired course of action
+
*To identify and depict unknown steps to a desired end when one does not know precisely how to achieve them<ref name="Emeralda"></ref>
+
|-
+
! scope="row"|Transition Trees
+
|The transition trees help to determine the actions necessary to implement the solution.
+
|
+
*Provide a step by step method for action implementation
+
*Enable effective navigation through a change process
+
*Detect deviation in progress toward a limited objective
+
*Adapt or redirect effort, should plans change
+
*Communicate the reasons for action to others
+
*Execute the injections developed in the EC or FRT
+
*Attain the intermediate objectives identified in a PRT
+
*Develop tactical action plans for conceptual or strategic plans
+
*Preclude undesirable effects from arising out of implementation. <ref name="Emeralda"></ref>
+
|}
+
+
<span style="color:red">HEIMILD FYRIR TOFLU</span>
+
=== Throughput Accounting ===
+
Throughput Accounting is TOC´s approach to accounting, a decision tool designed to ensure decisions that might have financial impact take a holistic perspective and do not optimize on metric or area of the business at the expense of the whole. Throughput accounting takes a decision regarding the constraint and values it according to financial terms because it acknowledges that the constraint determines capacity, hence profit potential of the company <span style="color:red"> [7]</span> . Cost accounting is known to perform gross margin analysis at the product level while Throughput Accounting determines profitability at the system level and looks at the production process to be a single system that must be optimized. Irrespective of the number of units created, Throughput Accounting assumes most production costs are required to maintain a system of production along with assuming most production costs do not vary directly with incremental production of a single product.
+
 
+
== Constraints ==
+
Constraints are like said before, anything that prevents the organization from making progress towards its goal. Constraints can take many forms other than equipment and there are differing opinions how to categorize them, one approach is shown in the table below:
+
 
+
{| class="wikitable" style="width: 600px;"
+
|+ style="text-align: left;" | Categorized constraints <ref name="Lean" />
+
|-
+
! scope="row"| Constraint
+
! Description
+
|-
+
! scope="row"|Physical
+
|Typically equipment, but can also be other tangible items, such as material shortages, lack of people, or lack of space.
+
|-
+
! scope="row"|Policy
+
|Required or recommended ways of working. May be informal (e.g. described to new employees as “how things are done here”). Examples include company procedures (e.g. how lot sizes are calculated, bonus plans, overtime policy), union contracts (e.g. a contract that prohibits cross-training), or government regulations (e.g. mandated breaks).
+
|-
+
! scope="row"|Paradigm
+
|Deeply ingrained beliefs or habits. For example, the belief that “we must always keep our equipment running to lower the manufacturing cost per piece”. A close relative of the policy constraint.
+
|-
+
! scope="row"|Market
+
|Occurs when production capacity exceeds sales (the external marketplace is constraining throughput). If there is an effective ongoing application of the Theory of Constraints, eventually the constraint is likely to move to the marketplace.
+
|}
+
 
+
== Theory of Constraints in Software Engineering ==
+
  
Theory of Constraints was first introduced in relation to manufacturing where the goal is to identify bottlenecks in the production line but since the method has been applied in engineering, project management, sales, accounting and other business processes. In manufacturing, the constraint can be found where there are queues of ''Work in Process'' (WIP) in front of specific equipment and therefore causes extra inventories. In Software Engineering, the whole idea is to identify and manage what causes the inventory, but what is inventory in Software Engineering?  
+
Since the method was first applied, has it been applied in project management, engineering, sales, accounting and other business processes. In Software Engineering, the whole idea is to identify and manage what causes the inventory, but what is inventory in Software Engineering?  
  
 
The list of client-value functionality that Software Developers have to solve is an inventory in Software Engineering. <ref name="TOCSE"></ref>
 
The list of client-value functionality that Software Developers have to solve is an inventory in Software Engineering. <ref name="TOCSE"></ref>
Line 148: Line 82:
 
Inventory in Software Engineering can be expressed in different ways, depending on the software methodology used. A unit of inventory could be, for instance:  
 
Inventory in Software Engineering can be expressed in different ways, depending on the software methodology used. A unit of inventory could be, for instance:  
 
*A Use Case in UDP [a.k.a. RUP].
 
*A Use Case in UDP [a.k.a. RUP].
*A Story Point in XP (eXtreme Programming).
+
*A Story Point in [https://en.wikipedia.org/wiki/Extreme_programming Xp (eXtreme programming)] .
*A Feature in FDD (Feature-Driven Development).
+
*A Feature in [https://en.wikipedia.org/wiki/Feature-driven_development FDD (Feature-Driven Development)].
*A Backlog Item in Scrum.
+
*A Backlog Item in [https://en.wikipedia.org/wiki/Scrum_(software_development) Scrum].
 
*A Function Point in traditional SDLC structured methods. <ref name="TOCSE"></ref>
 
*A Function Point in traditional SDLC structured methods. <ref name="TOCSE"></ref>
  
 
== Applying Theory of Constraints in Software Engineering ==
 
== Applying Theory of Constraints in Software Engineering ==
According to David J. Anderson, producing and holding too much inventory is much worse in software because of the perishable nature of the inventory where requirements can go stale because of changes in the market or the fickle nature of the customer. Requirements have time value i.e. they have time to market value. With time, the throughput from the transformation of the requirement into working code decreases, specially when requirements are replaced by change requests for new requirements with a current market value. Requirements that become stale are pure waste <ref name="Anderson"></ref>.  
+
According to David J. Anderson, producing and holding too much inventory is really bad in software because of the perishable nature of the inventory where requirements can go stale because of changes in the market or the fickle nature of the customer. Requirements have time value. With time, the throughput from the transformation of the requirement into working code decreases, specially when requirements are replaced by change requests for new requirements with a current market value. Requirements that become stale are pure waste <ref name="Anderson"></ref>.  
  
 
In this chapter the applying of the theory will be explained through Five Focusing Steps and Throughput Accounting in relevance to Software Engineering
 
In this chapter the applying of the theory will be explained through Five Focusing Steps and Throughput Accounting in relevance to Software Engineering
Line 160: Line 94:
  
 
==== 1. Identify the system´s constraints ====
 
==== 1. Identify the system´s constraints ====
The first thing to do in order to use Theory of Constraints to improve a system is to identify the constraints and prioritize them according to their impact on the goal. As said before, constraints can take many forms and the most known constraints are bottlenecks, the physical constraint and therefore it can be a good idea to start identifying them.
+
The first thing to do in order to use Theory of Constraints to improve a system is to identify the constraints and prioritize them according to their impact on the goal. As said before, constraints can take many forms and the most known constraints are bottlenecks and therefore it can be a good idea to start identifying them. It is generally assumed that there is only one global system constraint at any given time. Once a constraint has been identified, a decision must be made on how to minimize its constraining ability on the system. The constraint must be fully utilized and according to David J. Anderson; every unit of production lost in the constraint is a unit lost in the whole system <ref name="Anderson"></ref>.
 
+
According to David J. Anderson it is generally assumed that there is only one global system constraint at any given time <ref name="Anderson"></ref>.
+
 
+
Once a constraint has been identified, a decision must be made on how to minimize its constraining ability on the system. The constraint must be fully utilized and according to David J. Anderson; every unit of production lost in the constraint is a unit lost in the whole system <ref name="Anderson"></ref>.
+
  
 
==== 2. Decide how to exploit the system´s constraints ====
 
==== 2. Decide how to exploit the system´s constraints ====
When the constraints have been identified and prioritized and a decision about how they are going to be managed has been decided the vast majority of the system´s resources that are not constraints have to be managed also <ref name="TOCBOK"></ref>.
+
When the constraints have been identified and prioritized, a decision about how to manage them has to be made. The vast majority of the system´s resources that are not constraints have to be managed also. <ref name="TOCBOK"></ref> The objective off this step is to make the most of what you have and maximize throughput of the constraint using currently available resources. The step focuses on quick wins and rapid relief; leaving more complex and substantive changes for later. <ref name="Lean"></ref>
  
The objective with this step is to make the most of what you have and maximize throughput of the constraint using currently available resources. The step focuses on quick wins and rapid relief; leaving more complex and substantive changes for later. <ref name="Lean"></ref>
+
In the following table items that could improve constraint are described in general:
  
In the following table items that could improve constraint are described in general:
 
 
{| class="wikitable" style="width: 800px;"
 
{| class="wikitable" style="width: 800px;"
 +
|+ style="text-align: left;" | General description <ref name="Lean" />
 
! scope="row"| Item
 
! scope="row"| Item
 
! Description
 
! Description
Line 193: Line 123:
 
! scope="row"|Offload (External)
 
! scope="row"|Offload (External)
 
|Offload some work to other companies. This should be a last resort if other techniques are not sufficient to relieve the constraint.
 
|Offload some work to other companies. This should be a last resort if other techniques are not sufficient to relieve the constraint.
|-
 
<span style="color:red">HEIMILD FYRIR TOFLU</span>
 
 
|}
 
|}
  
Line 207: Line 135:
 
*Requirements she is given are of good quality <ref name="Lean"></ref>
 
*Requirements she is given are of good quality <ref name="Lean"></ref>
  
If the actions taken in this step solve the constraint, next step is step five, otherwise continue to step three.
+
If the actions taken in this step solve the constraint the next step is to go on to step five, otherwise continue to step three.
  
 
==== 3. Subordinate everything else to the above decision ====
 
==== 3. Subordinate everything else to the above decision ====
  
The primary objective in step three is to support the needs of the constraint and the focus in on non-constraint equipment <ref name="Lean"></ref>.
+
The primary objective in step three is to support the needs of the constraint as the focus is on non-constraint equipment <ref name="Lean"></ref>.
  
 
Some useful techniques for this step include:  
 
Some useful techniques for this step include:  
 
 
{| class="wikitable" style="width: 800px;"
 
{| class="wikitable" style="width: 800px;"
 +
|+ style="text-align: left;" | Useful techniques <ref name="Lean" />
 
! scope="row"| Item
 
! scope="row"| Item
 
! Description
 
! Description
Line 230: Line 158:
 
! scope="row"|Steady Operation
 
! scope="row"|Steady Operation
 
|Operate non-constraint equipment at a steady pace to minimize stops. Frequent inertial changes (i.e. stops and speed changes) can increase wear and result in breakdowns.
 
|Operate non-constraint equipment at a steady pace to minimize stops. Frequent inertial changes (i.e. stops and speed changes) can increase wear and result in breakdowns.
|-
 
<span style="color:red">HEIMILD FYRIR TOFLU</span>
 
 
|}
 
|}
  
If constraints should be fully exploited in Software Engineering the developers should not be loaded with any more than they can reasonably handle. So the rest of the system of software production must be subordinated to this notion.
+
To fully exploit constraints in Software Engineering the developers working should not be loaded with any more than they can reasonably handle. Thus the rest of the system of the software production must be subordinated to this notion.
  
 
==== 4. Elevate the system´s constraints ====
 
==== 4. Elevate the system´s constraints ====
In step 4 the objective is to elevate the constraint and might require more substantive changes. Investment of time and/or money is something that might need to elevate the constraint. <ref name="Lean"></ref>.  
+
In step 4 the objective is to elevate the constraint and might thus require more substantive changes. Investment of time and/or money is something that might be needed to elevate the constraint. <ref name="Lean"></ref>.  
  
Elevating a software developer from a constraint can be done in various ways. According to David J. Anderson the most obvious way used in the software industry is unpaid overtime, therefore the constraint in stretched. Managers could also hire more developers or introduce shift working or even use a better developer <ref name="Anderson"></ref>.
+
Elevating a software developer from a constraint can be done in various ways. According to David J. Anderson the most obvious way used in the software industry is unpaid overtime, therefore the constraint in stretched. Managers could also hire more developers, introduce shift working or even use a better developer <ref name="Anderson"></ref>.
  
==== 5. If in the previous steps a constraint has been brokes, go back to step one, but do not allow inertia to cause a system constrain ====
+
==== 5. If in the previous steps a constraint has been broken, go back to step one, but do not allow inertia to cause a system constrain ====
  
 
=== Throughput Accounting (TA) ===
 
=== Throughput Accounting (TA) ===
In traditional accounting, inventory is an asset. That often drives undesirable behavior at companies to manufacture items that are not truly needed because it generates a "paper profit" based on inventory that may or may not ever be sold. Since the Theory of Constraints considers inventory to be a liability, Throughput Accounting is used because it attempts to eliminate harmful distortions introduced in traditional accounting practices.<ref name="TOCSE"></ref>
+
In traditional accounting, inventory is an asset that often drives undesirable behavior at companies to manufacture items that are not truly needed. Those items are manufactured because it generates a "paper profit" based on inventory that may or may not ever be sold. Since the Theory of Constraints considers inventory to be a liability, Throughput Accounting is used as it attempts to eliminate harmful distortions introduced in traditional accounting practices.<ref name="TOCSE"></ref>
  
 
Core measures in Throughput Accounting are the following
 
Core measures in Throughput Accounting are the following
 
{| class="wikitable" style="width: 500px;"
 
{| class="wikitable" style="width: 500px;"
 +
|+ style="text-align: left;" | Core Measures in TA <ref name="TOCSE" />
 
|-
 
|-
 
! scope="row"| Measures
 
! scope="row"| Measures
Line 270: Line 197:
 
Positive business decision can be taken if the action considered increases throughput, decreases operating expenses or increases return on investment. <ref name="TOCSE"></ref>
 
Positive business decision can be taken if the action considered increases throughput, decreases operating expenses or increases return on investment. <ref name="TOCSE"></ref>
  
According to Steve Tendon, John Arthur Ricketts defines TA for Software Engineering in his book Reaching The Goal: How Managers Improve a Services Business Using Goldratt's Theory of Constraints in the following way:
+
Throughput Accounting for Software Engineering has been defined the following way:  
 
*'''Throughput''': is the rate of cash generated through delivery of working code into production […] It is computed as sales price minus direct costs, such as packaging, delivery, installation, training, support, and networking.
 
*'''Throughput''': is the rate of cash generated through delivery of working code into production […] It is computed as sales price minus direct costs, such as packaging, delivery, installation, training, support, and networking.
 
*'''Investment''': is all money invested in software production systems plus money spent to obtain ideas for client-valued functionality. It thus includes software development tools and requirements gathering. […]
 
*'''Investment''': is all money invested in software production systems plus money spent to obtain ideas for client-valued functionality. It thus includes software development tools and requirements gathering. […]
*'''Operating Expense''': is all money spent to produce working code from ideas. It is primarily direct labor of software engineers, but it also includes selling, general, and administrative costs.
+
*'''Operating Expense''': is all money spent to produce working code from ideas. It is primarily direct labor of software engineers, but it also includes selling, general, and administrative costs. <ref name="TOCSE"></ref>
  
By gathering requirements rapidly yet a <span style="color:red">...TO BE CONTINUED! </span>
+
Three examples will be given here below to apply Throughput Accounting in Software Engineering:  
 
+
* Reducing Operating Expenses can be done by discarding requirements before starting implementation work. Increasing throughput is done by eliminating user stories in an inventory that are worth less, therefore Operating Expenses have been reduced.
== Limitations and advantage ==
+
* Investments can be decreased by operating an Open-Source software. The more the Open - Source solution covers of the requirements of a company the more decrease in Investment.  
 +
* Targeting on a market niche instead of a broad market, a unit price can be increased and therefore the throughput is increased.
  
 +
== Limitations ==
 +
When applying the Theory of Constraints, one has to be aware of its limitations before implementing it.
 +
First of all, the identification of the constraint is really important. The theory might work on a constraint that is caused by another constraining factor or it might focus on an irrelevant constraint. Focusing on irrelevant constraint could lead to waste of resources and time to limit some problem that is not critical to the success of the company. Another limitation of the theory is lack of consideration of variable factors. If the constraint is a demand for product, that varies independently from any action taken through the theory, resources invested in increasing the demand could have been more beneficial in expanding the production capacity. Theory of Constraints limits itself to short-term effects which is a limitation that can be overcome by examining the long-term effects of the work. If the short-term effects remain valid over a longer time-frame, the strategy indicated by the theory may be valid. If not, then other constraints have to be identified that result in long term benefits.<ref name="Limit"> Bert Markgraf. [http://yourbusiness.azcentral.com/limitations-theory-constraints-16352.html "Limitations of the Theory of Constraints"], ''studioD'', Date unknown. Retrieved on 25. September 2016. </ref>
  
 
== Annoted Bibliography ==
 
== Annoted Bibliography ==
 +
*<ref name="Lean"> Unknown. [http://www.leanproduction.com/theory-of-constraints.html "Theory of Constraints"], ''Lean Production'', Date unknown. Retrieved on 10 September 2016. </ref> '''Vorne, Theory of Constraints''' This guide describes Theory of Constraints in comprehensible terms. It focuses on the basic terms of the theory and gets right to the point in each matter. The guide is made by an organization that specializes in manufacturing systems and follows the latest trends in Lean Manufacturing. The guide contains helpful tables about the subject which are used through the article. The guide is used through-out the article to get a better and simpler understanding of TOC.
  
 +
* <ref name="SoftwareBOK"> Braude, Eric J. & Bernstein, Michael E. "SOFTWARE ENGINEERING Modern Approaches", ''Waveland press, INC''United States of America 2016.</ref>  '''Eric J. Braude and Michael E. Bernstein, 2016, Software Engineering Modern Approaches.''' This book is designed to accommodate multiple approaches to the learning and teaching of Software Engineering. It is good to understand the basic thinking behind Software Engineering. The book was used in the article to get explain Software Engineering and its concept.
  
 +
*<ref name="Anderson"> Anderson, David J. "AGILE MANAGEMENT FOR SOFTWARE ENGINEERING: Applying the Theory of Constraints for Business Results", ''Prentice Hall PTR'' United States of America, September 17 2003. Retrieved on 10 September 2016</ref> '''David J. Anderson, 2003, Agile Management For Software Engineering: Applying the Theory of Constraints for Business Results''' This book is about software engineering management and explains how agile software development is used to make a business better. The author shows managers how to apply management science to gain the full business benefits of agility through application of the Theory of Constraints.
  
* <ref name="Lean"> Unknown. [http://www.leanproduction.com/theory-of-constraints.html "Theory of Constraints"], ''Lean Production'', Date unknown. Retrieved on 10 September 2016. </ref>
+
*<ref name="TOCBOK"> Goldratt, Eliyahu M. "What is this thing called THEORY OF CONSTRAINTS and how should it be implemented?", '''', Croton-on-Hudson, North River, New York 1990</ref>''' Eliyahu M. Goldratt, 1990, What is this thing called Theory of Constraints and how should it be implemented?''' This book walks through the crucial stages of a continuous program: the five steps of focusing; the process of change; how to prove effect-cause-effect; and how to invent simple solutions to complex problems. Goldratt is the one who originally introduced TOC and his way of introducing it is a little bit different than the others. The book is used in this article to get a better understanding of the Five Forces and TOC in whole.  
 
+
* <ref name="TOCBOK"> Goldratt, Eliyahu M. "What is this thing called THEORY OF CONSTRAINTS an how should it be implemented?", '''', Croton-on-Hudson, North River, New York 1990</ref>
+
 
+
* <ref name="SoftwareBOK">Braude, Eric J. & Bernstein, Michael E. "SOFTWARE ENGINEERING Modern Approaches", ''Waveland press, INC''United States of America 2016. Retrieved on 10 September 2016C</ref>
+
 
+
*<ref name="Anderson">Anderson, David J. "AGILE MANAGEMENT FOR SOFTWARE ENGINEERING: Applying the Theory of Constraints for Business Results", ''Prentice Hall PTR'' United States of America, September 17 2003. Retrieved on 10 September 2016C</ref>
+
 
+
* <ref name="Victoria">Mabin, Victora J. [http://www.systemdynamics.org/conferences/1999/PAPERS/PARA104.PDF "Goldratt's "Theory of Constraints" Thinking Processes: A Systems Methodology linking Soft with Hard"], ''Systems Dynamics'', Date unknown. Retrieved on 12 September 2016. </ref>
+
 
+
* <ref name="Emeralda">Kim, Seonmin & Mabin, Victora J. & Davies, John.  [http://www.emeraldinsight.com/doi/abs/10.1108/01443570810846883 "The theory of constraints thinking processes: retrospect and prospect"], ''International Journal of Operations & Production Management, Vol. 28 Iss: 2, pp.155 - 184'', Published 2008. Retrieved on 13 September 2016. </ref>
+
  
*<ref name="TOCSE"> Tendon, Steve. [http://chronologist.com/blog/2012-07-27/theory-of-constraints-and-software-engineering/ "Theory of Constraints and Software Engineering"], ''The TameFlow Chronologist'', Published July 27th 2012. Retrieved on 13 September 2016. </ref>
+
*<ref name="TOCSE"> Tendon, Steve. [http://chronologist.com/blog/2012-07-27/theory-of-constraints-and-software-engineering/ "Theory of Constraints and Software Engineering"], ''The TameFlow Chronologist'', Published July 27th 2012. Retrieved on 13 September 2016. </ref> ''' Steve Tendon, 2012, Theory of Constraints and Software Engineering.''' This article is looking at TOC and how it can be applied to Software Engineering Management. The article examines how Throughput Accounting can be used to take important management decisions. The article compares Cost Accounting versus Throughput Accounting with Software Engineering in mind along with explaining Throughput Accounting for Software Engineering. The article is used to get a better understanding on how Throughput Accounting is used in Software Engineering.
  
 
== References ==
 
== References ==
 
<references />
 
<references />

Latest revision as of 13:58, 18 December 2018

Developed by Iðunn Tara Ásgrímsdóttir


Theory of Constraints (TOC) is a methodology invented by Dr. Eliyahu M. Goldratt a scientist, physicist, author, educator and consultant[1]. With the methodology the most important limiting factor, that hinders a goal to be achieved, is identified. Then that factor (i.e. constraint) is improved until it is no longer the limiting factor. Since Goldratt introduced the Theory of Constraints in his bestselling 1984 novel, "The Goal", the methodology has continued to evolve and develop into many different fields including Software Engineering. [2]

The goals of Software Engineering is the creation of software systems that meet the needs of customers. The systems should be efficient, maintainable and reliable in addition to meeting project schedules and budgets and be produced in an economical way.[3] Applying analogous set of approaches to the development of software, one can expect the production to be a software that meets the goals of Software Engineering. [3]

Theory of Constraints (TOC) in relevance to Software Engineering is two folded. First of all, it is used to improve the flow of new products to the market and second determining the real value of a proposed project or a feature to the final user. The assumption is that if the real value to the user is known, then it is possible to develop the right marketing and sales approach to materialize the value to the user and the software organization. [4]

This article will introduce how the Theory of Constraints can be used in Software Engineering to achieve a set of previously identified goals (projects for example). The article will also give guidance on how to apply and use the methodology in practice.


Contents

[edit] Theory of Constraints

Before improving a system or any part of it, one must define the system’s global goal and the measurements that will be used to evaluate the effects of any subsystem or local decision on the goal. When measurements have been defined, the constraint that limits the system to reach its goal can be found. [5]

Theory of Constraints (TOC) is a methodology that is used to identify the most important constraints in a system and then improving the constraint until it is no longer the limiting one. According to TOC every complex system consists of multiple linked activities and one of these activities can be a constraint upon the whole system.

[edit] Constraints

Constraints are like said before, anything that prevents the organization from making progress towards its goal. Constraints can take many forms and are not necessarily only equipment. There are differing opinions on how to categorize different constraints, them, one approach is shown in the table below:

Categorized constraints [2]
Constraint Description
Physical Typically equipment, but can also be other tangible items, such as material shortages, lack of people, or lack of space.
Policy Required or recommended ways of working. May be informal (e.g. described to new employees as “how things are done here”). Examples include company procedures (e.g. how lot sizes are calculated, bonus plans, overtime policy), union contracts (e.g. a contract that prohibits cross-training), or government regulations (e.g. mandated breaks).
Paradigm Deeply ingrained beliefs or habits. For example, the belief that “we must always keep our equipment running to lower the manufacturing cost per piece”. A close relative of the policy constraint.
Market Occurs when production capacity exceeds sales (the external marketplace is constraining throughput). If there is an effective ongoing application of the Theory of Constraints, eventually the constraint is likely to move to the marketplace.


Theory of Constraints provides powerful set of tools to achieve the ultimate goal of a company: Make a profit .

Two of those tools will be introduced in the following chapter and later on explained in relation to Software Engineering along with explanation on how to use them.

[edit] The Five Focusing Steps

TOC provides the Five Focusing Steps to identify and eliminate the constraints, the steps are described in the table below:

The Five Focusing Steps [2]
Identify Identify the current constraint (the single part of the process that limits the rate at which the goal is achieved).
Exploit Make quick improvements to the throughput of the constraint using existing resources (i.e. make the most of what you have).
Subordinate Review all other activities in the process to ensure that they are aligned with and truly support the needs of the constraint.
Elevate If the constraint still exists (i.e. it has not moved), consider what further actions can be taken to eliminate it from being the constraint.

Normally, actions are continued at this step until the constraint has been “broken” (until it has moved somewhere else). In some cases, capital investment may be required.

Repeat The Five Focusing Steps are a continuous improvement cycle. Therefore, once a constraint is resolved the next constraint should immediately be addressed.

This step is a reminder to never become complacent – aggressively improve the current constraint… and then immediately move on to the next constraint.


[edit] The Throughput Accounting

Throughput Accounting is TOC´s approach to accounting, a decision tool designed to ensure decisions that might have a financial impact take a holistic perspective and do not optimize one metric or area of the business at the expense of the whole system. Throughput Accounting takes a decision regarding the constraint and values it according to its financial terms. It acknowledges that the constraint determines capacity, hence profit potential of the company.[6] Cost accounting is known to perform gross margin analysis at the product level while Throughput Accounting determines profitability at the system level and looks at the production process as a single system that must be optimized. Irrespective of the number of units created, Throughput Accounting assumes that most production costs are required to maintain a system of production. The approach also assumes that most production costs do not vary directly with incremental production of a single product.

[edit] Theory of Constraints in Software Engineering

Theory of Constraints was first introduced in relation to manufacturing. In manufacturing the goal is to identify bottlenecks in the production line. The constraint can be found where there are queues of Work In Progress (WIP) in front of specific equipment and therefore causes extra inventories.

Since the method was first applied, has it been applied in project management, engineering, sales, accounting and other business processes. In Software Engineering, the whole idea is to identify and manage what causes the inventory, but what is inventory in Software Engineering?

The list of client-value functionality that Software Developers have to solve is an inventory in Software Engineering. [7]

Inventory in Software Engineering can be expressed in different ways, depending on the software methodology used. A unit of inventory could be, for instance:

[edit] Applying Theory of Constraints in Software Engineering

According to David J. Anderson, producing and holding too much inventory is really bad in software because of the perishable nature of the inventory where requirements can go stale because of changes in the market or the fickle nature of the customer. Requirements have time value. With time, the throughput from the transformation of the requirement into working code decreases, specially when requirements are replaced by change requests for new requirements with a current market value. Requirements that become stale are pure waste [4].

In this chapter the applying of the theory will be explained through Five Focusing Steps and Throughput Accounting in relevance to Software Engineering

[edit] Five Focusing Steps

[edit] 1. Identify the system´s constraints

The first thing to do in order to use Theory of Constraints to improve a system is to identify the constraints and prioritize them according to their impact on the goal. As said before, constraints can take many forms and the most known constraints are bottlenecks and therefore it can be a good idea to start identifying them. It is generally assumed that there is only one global system constraint at any given time. Once a constraint has been identified, a decision must be made on how to minimize its constraining ability on the system. The constraint must be fully utilized and according to David J. Anderson; every unit of production lost in the constraint is a unit lost in the whole system [4].

[edit] 2. Decide how to exploit the system´s constraints

When the constraints have been identified and prioritized, a decision about how to manage them has to be made. The vast majority of the system´s resources that are not constraints have to be managed also. [5] The objective off this step is to make the most of what you have and maximize throughput of the constraint using currently available resources. The step focuses on quick wins and rapid relief; leaving more complex and substantive changes for later. [2]

In the following table items that could improve constraint are described in general:

General description [2]
Item Description
Buffer Create a suitably sized inventory buffer immediately in front of the constraint to ensure that it can keep operating even if an upstream process stops.
Quality Check quality immediately before the constraint so only known good parts are processed by the constraint.
Continuous Operation Ensure that the constraint is continuously scheduled for operation (e.g. operate the constraint during breaks, approve overtime, schedule fewer changeovers, cross-train employees to ensure there are always skilled employees available for operating the constraint).
Maintenance Move routine maintenance activities outside of constraint production time (e.g. during changeovers).
Offload (Internal) Offload some constraint work to other machines. Even if they are less efficient, the improved system throughput is likely to improve overall profitability.
Offload (External) Offload some work to other companies. This should be a last resort if other techniques are not sufficient to relieve the constraint.

David J. Anderson suggested to use exploit Software Developers, that work 8 hours per day, as resources in the following ways:

  • Always have pool of development tasks ready to be done for the developer
  • Protect the developer from interruptions by providing a communication structure that minimizes the lines of communication
  • Provide quiet environment for working to protect the developer from distraction
  • Provide the best Software Development tools available to further exploit the developer
  • Provide support staff for nonproductive activities (progress reporting, time-tracking and more) - Non value-added work is waste
  • Provide adequate training in the technologies being used
  • Provide team of colleagues to support and help resolve difficulties
  • Requirements she is given are of good quality [2]

If the actions taken in this step solve the constraint the next step is to go on to step five, otherwise continue to step three.

[edit] 3. Subordinate everything else to the above decision

The primary objective in step three is to support the needs of the constraint as the focus is on non-constraint equipment [2].

Some useful techniques for this step include:

Useful techniques [2]
Item Description
DBR Implement DBR (Drum-Buffer-Rope) on the constraint as a way of synchronizing the manufacturing process to the needs of the constraint.
Priority Subordinate maintenance to the constraint by ensuring that the constraint is always the highest priority for maintenance calls.
Sprint Add sprint capacity to non-constraint equipment to ensure that interruptions to their operation (e.g. breakdowns or material changes) can quickly be offset by faster operation and additional output.
Steady Operation Operate non-constraint equipment at a steady pace to minimize stops. Frequent inertial changes (i.e. stops and speed changes) can increase wear and result in breakdowns.

To fully exploit constraints in Software Engineering the developers working should not be loaded with any more than they can reasonably handle. Thus the rest of the system of the software production must be subordinated to this notion.

[edit] 4. Elevate the system´s constraints

In step 4 the objective is to elevate the constraint and might thus require more substantive changes. Investment of time and/or money is something that might be needed to elevate the constraint. [2].

Elevating a software developer from a constraint can be done in various ways. According to David J. Anderson the most obvious way used in the software industry is unpaid overtime, therefore the constraint in stretched. Managers could also hire more developers, introduce shift working or even use a better developer [4].

[edit] 5. If in the previous steps a constraint has been broken, go back to step one, but do not allow inertia to cause a system constrain

[edit] Throughput Accounting (TA)

In traditional accounting, inventory is an asset that often drives undesirable behavior at companies to manufacture items that are not truly needed. Those items are manufactured because it generates a "paper profit" based on inventory that may or may not ever be sold. Since the Theory of Constraints considers inventory to be a liability, Throughput Accounting is used as it attempts to eliminate harmful distortions introduced in traditional accounting practices.[7]

Core measures in Throughput Accounting are the following

Core Measures in TA [7]
Measures Equation
Throughput T = Revenue - Totally Variable Expenses
Net Profit NP = Throughput - Operating Expenses
Return on Investment ROI = Net Profit / Investment

According to Steve Tendon, to make the correct decision, you need a positive answer to one of these three questions:

  • Does it increase throughput?
  • Does it reduce operating expenses?
  • Does it increase the return on investment? [7]

Positive business decision can be taken if the action considered increases throughput, decreases operating expenses or increases return on investment. [7]

Throughput Accounting for Software Engineering has been defined the following way:

  • Throughput: is the rate of cash generated through delivery of working code into production […] It is computed as sales price minus direct costs, such as packaging, delivery, installation, training, support, and networking.
  • Investment: is all money invested in software production systems plus money spent to obtain ideas for client-valued functionality. It thus includes software development tools and requirements gathering. […]
  • Operating Expense: is all money spent to produce working code from ideas. It is primarily direct labor of software engineers, but it also includes selling, general, and administrative costs. [7]

Three examples will be given here below to apply Throughput Accounting in Software Engineering:

  • Reducing Operating Expenses can be done by discarding requirements before starting implementation work. Increasing throughput is done by eliminating user stories in an inventory that are worth less, therefore Operating Expenses have been reduced.
  • Investments can be decreased by operating an Open-Source software. The more the Open - Source solution covers of the requirements of a company the more decrease in Investment.
  • Targeting on a market niche instead of a broad market, a unit price can be increased and therefore the throughput is increased.

[edit] Limitations

When applying the Theory of Constraints, one has to be aware of its limitations before implementing it. First of all, the identification of the constraint is really important. The theory might work on a constraint that is caused by another constraining factor or it might focus on an irrelevant constraint. Focusing on irrelevant constraint could lead to waste of resources and time to limit some problem that is not critical to the success of the company. Another limitation of the theory is lack of consideration of variable factors. If the constraint is a demand for product, that varies independently from any action taken through the theory, resources invested in increasing the demand could have been more beneficial in expanding the production capacity. Theory of Constraints limits itself to short-term effects which is a limitation that can be overcome by examining the long-term effects of the work. If the short-term effects remain valid over a longer time-frame, the strategy indicated by the theory may be valid. If not, then other constraints have to be identified that result in long term benefits.[8]

[edit] Annoted Bibliography

  • [2] Vorne, Theory of Constraints This guide describes Theory of Constraints in comprehensible terms. It focuses on the basic terms of the theory and gets right to the point in each matter. The guide is made by an organization that specializes in manufacturing systems and follows the latest trends in Lean Manufacturing. The guide contains helpful tables about the subject which are used through the article. The guide is used through-out the article to get a better and simpler understanding of TOC.
  • [3] Eric J. Braude and Michael E. Bernstein, 2016, Software Engineering Modern Approaches. This book is designed to accommodate multiple approaches to the learning and teaching of Software Engineering. It is good to understand the basic thinking behind Software Engineering. The book was used in the article to get explain Software Engineering and its concept.
  • [4] David J. Anderson, 2003, Agile Management For Software Engineering: Applying the Theory of Constraints for Business Results This book is about software engineering management and explains how agile software development is used to make a business better. The author shows managers how to apply management science to gain the full business benefits of agility through application of the Theory of Constraints.
  • [5] Eliyahu M. Goldratt, 1990, What is this thing called Theory of Constraints and how should it be implemented? This book walks through the crucial stages of a continuous program: the five steps of focusing; the process of change; how to prove effect-cause-effect; and how to invent simple solutions to complex problems. Goldratt is the one who originally introduced TOC and his way of introducing it is a little bit different than the others. The book is used in this article to get a better understanding of the Five Forces and TOC in whole.
  • [7] Steve Tendon, 2012, Theory of Constraints and Software Engineering. This article is looking at TOC and how it can be applied to Software Engineering Management. The article examines how Throughput Accounting can be used to take important management decisions. The article compares Cost Accounting versus Throughput Accounting with Software Engineering in mind along with explaining Throughput Accounting for Software Engineering. The article is used to get a better understanding on how Throughput Accounting is used in Software Engineering.

[edit] References

  1. McMullen, Jr., Thomas B. "Introduction to the Theory of Constraints (TOC) Management System", APICS Pub.1998
  2. 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 Unknown. "Theory of Constraints", Lean Production, Date unknown. Retrieved on 10 September 2016.
  3. 3.0 3.1 3.2 Braude, Eric J. & Bernstein, Michael E. "SOFTWARE ENGINEERING Modern Approaches", Waveland press, INCUnited States of America 2016.
  4. 4.0 4.1 4.2 4.3 4.4 Anderson, David J. "AGILE MANAGEMENT FOR SOFTWARE ENGINEERING: Applying the Theory of Constraints for Business Results", Prentice Hall PTR United States of America, September 17 2003. Retrieved on 10 September 2016
  5. 5.0 5.1 5.2 Goldratt, Eliyahu M. "What is this thing called THEORY OF CONSTRAINTS and how should it be implemented?", ', Croton-on-Hudson, North River, New York 1990
  6. Tarantino, Anthony & Cernauskas, Deborah "Risk Management in Finance: Six Sigma and Other Next-Generation Techniques", John Wiley & Sons, Inc, 2009, chapter 21
  7. 7.0 7.1 7.2 7.3 7.4 7.5 7.6 7.7 Tendon, Steve. "Theory of Constraints and Software Engineering", The TameFlow Chronologist, Published July 27th 2012. Retrieved on 13 September 2016.
  8. Bert Markgraf. "Limitations of the Theory of Constraints", studioD, Date unknown. Retrieved on 25. September 2016.
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox