Saturday, August 18, 2007

Lean Software Development

Our most successful custom software projects are the ones that are developed "at the pull of the customer, and at the speed of engagement". What do I mean by "successful"? Successful to our customers (in its simplest definition) is software that supports their business processes in a manner which enables them to get the most work accomplished per unit of time with the least amount of effort. Successful to us is software that has gained such a wide acceptance by the users that they become evangelists of the software. They recognize so much value in the software and how effectively it enables them to continuously improve their business processes that they encourage others to use the software and they would actively lobby for the software if some outside force attempts to discontinue or replace it with something else.

How do we as a software development company ensure that our software will be successful as defined above?

  • We make sure that software (virtual environment) matches the real environment as much as possible. The software process must match the real world conditions as closely as possible. The software process should not just match an ideal workflow, it should match the actual workflow. This provides a clear path for improvement.
  • We work directly with the people that will use the software. The software users effectively become software designers. They are much more likely to support and use the software if they are involved in the design. It virtually guarantees success.
  • We either learn everything possible about the business process the software will support, or ideally, we participate in the design of the business process itself.
  • We keep the software as simple as possible, excluding all features that are not completely necessary.
  • We add features and functionality at the pull of the customer. By customer I am referring to the entire user base that will be using the software, not just a customer champion. It is very important that the majority of the users are ready and requesting new functionality to get the maximum benefit. Unnecessary features and functionality is wasteful. It takes valuable time (to the developer) to create, maintain, and test features that are not immediately useful. It adds unnecessary complication for the user when they are presented with more functionality than they need. It just slows the learning curve. Our typical customers use about 85-95% of the features that are present in our software. That is an exceptionally high percentage when compared to typical off-the-shelf software.