Thoughts on Modern Software Factories (1),
My recent project, which was a success in many ways also had its “bads”. Like so many other projects we missed milestones, ignored our budget far to often and suffered from bad leadership. A lot of companies see themselves in an industry which is rapidly maturing. A more demanding customer changes the market place rapidly. Producing good quality software on time is hard and forces us to look closer at the processes and the role(s) we play in them.
The craftsmanship of software engineering is facing a new challenge because the software industry might be industrialized [Greenfield and Short]. I can almost hear you think that developing software simply cannot be industrialized. It would loose all aspects we like so much about our work, wouldn’t it? If anyone should know I would. In a previous life I’ve worked in the metal industry. Back then one of the main reasons for my career change was retaining back my creativity (I actually found out that it was this what I was missing a little while back). So now the software industry might be industrialized... hell no! psst… hell yes, you see Modern Software Factories abstract us from all irrelevance and drives us to be creative in what we do best.
In essence the goals of industrializing the software industry, building a Software Factory consisting out of one or more Software Production Lines are productivity and predictability [Toon Loonen].
Optimizing productivity contains many of the insights which underlie the Japanese Kanban system.
Kanban was developed at the Toyota car plants in Japan as a program to smooth the flow of products throughout the production process. It aims to improve productivity by observing the flow of products through the production system [PMS].
Assuming possible products (depending on your business) would be; information analyses, architecture, software, documents, etc. How can we influence the flow of products in a Software Production Line? The better the flow is the higher the rate at which we produce right? First we need to study, throughput, inventory, and operating expenses.
Throughput is the rate at which the Software Factory makes money through selling finished goods (some of the products mentioned earlier). It is not a measure of production.
Inventory is defined as the raw software (reusable components) or buyable components (for example an Object Relational-mapping framework) , finished goods in the form of in-house developed reusable components. Standards. Proven architecture can as well be seen as inventory. I guess solid Domain knowledge (Domain knowledge isn’t stable, business changes rapidly, and so I doubt that Domain knowledge is properly categorized as inventory) fits in this category as well.
Operating expenses are defined as the cost of converting inventory into throughput. You could think of direct or indirect labor, facilities. Or if you work at Microsoft; soda machines, couches, gadgets… just to name a few. Operating expenses are a measure of costs incurred to produce some of the products mentioned earlier.
Changes in any of these three elements result in changes in the financial measurements as follows:
- Return on Investment (ROI),
- Net profit,
- Cash flow.
The goal of a Software Production Line is to increase throughput, decrease inventory and operating expenses. The question now is how do these variables measure up? Do as I do and spend some time thinking on Modern Software Factories.
In a future post I will discuss bottlenecks and their influence on productivity. How we can make productivity measurable to achieve a certain degree of predictably. And finally what a Modern Software Factory has to do with creativity.
[Greenfield and Short]
Jack Greenfield and Keith Short. Software Factories: Assembling Applications with Patterns, Frameworks, Models and Tools, 2003.
[Toon Loonen]
Toon Loonen. Architectuur en Ontwikkelstraat, 2000
[Anko Duizer]
Anko Duizer. Ontwikkelstraat, MSDN column 2004
[PMS]
Browne, Harhen, Shivnan. Production Management Systems: An Integrated Perspective. 1996