Lean Software Development


What is Lean Software Development?

In Business, managers and strategists keep eye on the efficiency and profitability. Thus, many philosophers have developed concepts to improve them. Lean Companies, Lean Startups, Lean Manufacturing are among the most used terminologies which focus on improving the respective processes. The concept Lean was derived from the Toyota Production system (Just In Time Production) by Henry Ford.

In Traditional manufacturing companies including Toyota, Lean Management was introduced as a way of improving the efficiency and profitability in manufacturing process. Its all about identifying waste, eliminating them and focus on the most important things.

Concepts in Lean Manufacturing for manufacturing companies.

Lean Software Management is simply adopting the lean principals to the Software development domain.

Tom and Mary Poppendieck gave an conceptual translation of Lean Manufacturing Concepts in to Software Development.

Even though it seems easy to follow the guidelines, you will require a shift in mindset. Read through this guidelines and the 7 principles with an open mind to change if you are willing to apply Lean principals to your Software Development Company.

Seven Principles.

1. Eliminate Waste.

This is the first concept which says, remove everything which do not add a final value to the customer.

  • Remove unnecessary code or functionality - Fancy looking features may not be used by the customers after a small period if they do not add proper value.
  • Do not start if it cannot be completed - Do not add unnecessary complexity to the software system. Evaluate the value generation. Do not keep partially done work.
  • Remove delays - Delays can make clients and customers feel frustrated. Thus, try to reduce.
  • Remove defects and quality issues - It’s important to think about the quality to improve customer satisfaction and to avoid re-dos

2. Build Quality In.

It is not about testing a lot at the end, but creating a quality product from the very first step.

  • Pair Programming - Involve 2 or more programmers to do a single task to combine the skills and experience.
  • Test-driven Development - In every step, create a criteria to test with respect to the requirements, and conduct quality tests.
  • Incremental Development and constant feedback
  • Minimize wait states
  • Automate repetitive tasks

3. Create knowledge.

Even though it appears as a simple principle, you need discipline and focus to implement this. Combine several things from the following list to retain valuable learning inside your software development company.

  • Pair Programming - Involve 2 or more programmers to do a single task to combine the skills and experience.
  • Code Reviews
  • Documentation
  • Wiki
  • Training
  • Usage of best practices

4. Defer Commitment.

Guys. Literal meaning of Defer is to postpone. Beware!. This is not asking you to be irresponsible in decision making. Instead, this means not to plan / commit excessively on a project without fully understanding of the requirements and proper agreements. You should focus on getting required information and analyze them.

5. Deliver Fast.

Everyone needs fast results. So does your client. If you want to deliver your software product fast, check what is slowing down your process

  • Do not think excessively in advance about future requirements
  • Remove blocking processes which do not respond fast
  • Do not over-engineer

6. Respect People.

Guys. Please understand that it is people which matters the most at the end of the day. Please be humble to everyone, your boss, employee, staff, client and to your colleagues.

Proactive and efficient communication in day-to-day life as well as in conflict management, hiring and process improvements is needed for successful lean team

7. Optimize the whole.

Lean software team should be able to optimize the sub tasks within the whole project. According to the lean principals, two major causes for failures are identified. The first one is releasing sloppy code in order to obtain faster results. And the other one is the issue with large testing cycles.

  • Do not release sloppy code in order to obtain faster results - People try to take faster approach without thinking about the long term future. If you release sloppy code fast, you will definitely spend more time in the future with more trouble. Thus, please have a look at the project as a whole with a long-term plan.
  • Optimize the testing cycles - Usually, testers are overloaded, they have plenty of things to test and many bugs are identified. It takes a lot of time for them to get to the developer, to make the fixes and to do the follow up releases. This slows down the process.

Reference.