Tuesday, April 26, 2011

Applying Radical Programming: Software is a Batch Process

Before applying the lean thinking to software engineering we must understand what are the concerns that lean thinking tries to solve and where exactly process of producing software fits in. 
See my earlier post What is radical programming? if you want and introduction to Radical Programming.

Mass Production vs Mass Customization 
Unlike craft production mass production relies on the standard components and economy of scale. Each unit is like every other unit and  parts are interchangeable. The assembly line can increase the throughput but then it becomes very difficult to change and to customize. 
On the other hand the more customization is required the less standard and costly the production becomes. Why is this relevant to software engineering ? That is because each software system is unique we have a need for high degree of custom software development and at the same time we need to bring in mass production techniques. 

User Story (Use case) is the unit of software production. 
In Radical Programming we treat user story as the unit of production. Our output is measured in terms of number of user stories implemented. We imagine an assembly line where a user story starts its life as a simple statement of user need which is developed into full set of acceptance tests and lightweight use case. It is then translated into design delta and finally implemented, tested and integrated. Individual user stories are the basis of calculations to make production decisions. 

Process Types 
One of the most critical factor in implementing efficient production system is to identify the process type that best achieves the tradeoffs between quality , time and flexibility.
There are five types to choose from

  1. Project Process - There is a high degree of customization and very low volume . Which means each project is unique. Flows and dependencies are very complicated.
  2. Job Process - Even though it is customized the volume is high enough. Which means each job is not as unique as project. Each new order is handled as a single unit and produced made to order. Flows and dependencies are jumbled. Examples are your doctors's visit, jobs with car mechanic, process for auto loan approval. Variety is achieved through "made to order" strategy.
  3. Batch Process: There is high volume and variety is achieved through "assemble to order". Most importantly items are produced as a batch. Some intermediate products might be pre-processed.
  4. Line Process: Volumes are very high. Fast food services and car assembly lines are examples of line processes. There are line flows with very little inventory held between operations.
  5. Continuous Process: It requires extremely high volume and very generic standardized product.
Software as a batch process with Time Boxing 
Like Scrum the radical programming achieves its goal using series of scrums. In radical programming we treat the software production as a Batch Process where we produce batch of user stories each iteration.

by Sachin Joshi
for Washington Technical Resources

Simple theory of Management: 8 Ps

I have a very simple theory about what senior managers need to do.  There job is to convert potential into profitability through internal and external interaction
And that means specifically managing 8 Ps described below. Call it "Sachin Joshi Model of Management" if you wish.
Discussion is more relevant to executives and other senior managers who in my vocabulary are called "business owners".
Financial Perspective 

1. Profitability : The reality is that businesses need to keep themselves profitable which means managers must take right financial decisions. At minimum it means managers must be financially  literate. Beyond budgeting and forecasting there are many decisions that require using finance/accounting tools. Selecting the right project size and team size. Pricing the products. Making buy vs build vs rent decisions. One of the most useful concepts are   Minimum Marketable Feature and idea of Real Options.   
External Perspective
2. Positioning : Nothing is so critical than finding the right fit to market and positioning the products in a market place. Nothing succeeds like an idea whose time has come. Your talent as a manager is in finding that right idea. The entire process of dividing the markets in right segments, selecting the right customers and solving right set of problems for them is all what I call "positioning". It requires making right decisions all the time. And that doesn't happen without instituting the customer focus. Customer focus is not some magic thing you do but a value system and tool that results in a well defined procedure for "positioning" your service.
3. Partnerships: No business works in isolation. So yet another job is to manage partnerships with vendors and clients.
Internal Perspective
4. Programs: Many managers make mistake of thinking that what they are delivering is product or a project. But in reality what they are doing is managing series of projects and set of products which requires Program Management. Defining and managing program objectives is a top item in job description of senior manager. A successful manager must be able to map strategy into programs and then translate the vision in terms of program objectives. (I plan to write a blog about mapping strategy into program objectives.)
5. Process : No software gets built without proper process in place. One of the important jobs of manager is to define process and actively manage it. There is a large body of knowledge dedicated to project management and process improvements. Wisdom and drive in applying these principals to increase quality is what managers demonstrate everyday.
6. Policy: Make sure that technical standards are defined and followed. Rather than actually making each and every decision themselves senior managers define policy. To me policy is framework in which those decisions are made.  One of the most important job of managers is to define that framework and provide guidance in applying it to everyday decisions. 

Growth Perspective 

7. People: The generative power of business comes from the talent and creativity of its people. And no where is this more important than in software. Success in providing the environment where people can grow is how we must measure our progress
8. Productivity : Equally important is increasing our production capability or "Productivity". Smart tools turn smart people into even smarter geniuses.   

by Sachin Joshi
For Washington Technical Resources