Application development can learn from other domains.
Think of auto manufacturing and assembly.
A typical automobile these days has 30,000 parts.
Each part is typically fabricated by a third party to exacting specifications.
After the part is completed, it is shipped to a third-party location for inclusion in a sub-assembly or delivered to an auto plant for final assembly.
Staff are trained how to install and test the part. Software is packaged within class containers. Each container contains interfaces for function points, methods for performing a function such as updating a customer account.
The concept of just in time manufacturing was first presented as the Toyota Production System in the book The Study of the Toyota Production System from an Industrial Engineering Perspective, by Shingo and Dillon.Link Key factors include:
1. Eliminate Waste
a. Process Improvement
b. Value Added
c. Overproduction and excess inventory
d. Order based production
2. Quality by Design
3. Market Driven Pricing
4. Worker Flexibility
Workers are cross trained on several pieces of equipment.
How can these principles be applied to software development?
The precious resource to be managed is the time to develop, test and release an application.
One area of waste in software development is testing and handling production errors and exceptions. Bugs happen.
Exceptions are a class of errors flagged by the environment such as divide by zero.
Errors are defined by logic. For example, an error condition arises where an expected input such as account number was not provided, and the code failed to check for the condition.
In some instances, the application can report the condition and carry on while in other cases the application terminates.
Detecting error conditions would typically inspect the value of certain datapoints. If the values were in a specified range, then the inspection would pass.
Detecting exceptions before they happen is problematic. At the time of the exception, the server ran out of memory or was not connected to a database because the application closed it elsewhere in the application.
The automation of error handling using tools would be a good first start. The tool would enable the developer to define quality tests, check for the condition and take remedial action. The tool would also contain its own logging system and log query and viewer web application. An advanced version would create a trouble ticket and notify the on-call support team of the problem, where the problem happened a link to the details.
On the subject of Value Added, code reuse is one area that many organizations are week maintaining their code library. A major issue is that code is an enterprise resource but developing it is a project resource. Ensuring reuse after the project is not a consideration.
One idea is to move beyond code management tools like CVS or GitHub to tools that are component aware and track what the code does. I could then file the code under the Customer Service component with subcomponents such as CustomerServiceAgent. The CustomerProfile component on the other hand is a ready to run component which eliminates the need to manage data or the customer profile user interface.
Quality by Design can be fleshed out in several ways:
1. The project sponsor and business analyst must produce clear business specifications.
2. The use cases are well defined and documented.
3. The solution architect must ensure all requirements map to a component to be implemented.
4. The application architect ensures the code is developed as a collection of small components.
5. The solution is signed off without deliberation.
6. The code is thoroughly tested.
7. A production lines of code defect rate such as 0.05% is established.
8. The stakeholders including users like the system.
Market Driven Pricing
The Japanese would engineer a car to be completive with the market by designing a car that cost what the market will bear rather than building a car that will cost $X.
Estimation of software development effort and cost is a fine art.
There is typically a maximum system cost. Often is the case that this number is usually below the estimated cost. The sponsor needs to express which requirements can be dropped or parked should the cost exceed the sponsor’s expectation.
As we can see, building software applications has much to learn from Toyota’s manufacturing methodology.