Lean Forward – How Lean Software Development is Shaping Our Virtual World

Lean software development is a movement dedicated to reducing errors and wasted time while maximizing education and efficiency.  Its principles were originally used in IT and manufacturing, and it has since been adopted by the programming community.

The guiding philosophy of lean development is a primary commitment to the value being created for the end user while intelligently conserving resources.  It has large support among the Agile development community, which it has much in common with.

Seven key principles compose the backbone of lean software development: waste elimination, encouraging learning, late decision-making, fast delivery, team empowerment, built-in integrity, and a vision of the big picture.

Let’s go over these principles to see why lean programming is so popular today.

Waste Elimination – Waste should be seen as anything that fails to bring any additional value to the customer.  This includes unnecessary code and functions and requirements that don’t make sense.  It also means time, so software engineers should not be afraid to speak up when bureaucracy gets in the way of progress

Encouraging Learning – This may seem obvious, but there are often times during a project when certain people don’t know what they need to know, or the information they need isn’t available.  There are several ways to help people understand their tasks – comprehensive code reviews and documentation, creating a Wiki database, adequate commenting, training sessions, and group meetings.  Pair programming is an interesting solution, in which two programmers team up at the same station and work on separate tasks.  This is a good situation to help a less experienced programmer make progress by working with someone who knows what they are doing.

Late Decision-Making – This means deferring commitment for as long as possible, particularly when it comes to decisions that will be difficult or impossible to take back.  It lets a programming team keep their options open for as long as possible, letting them think and gather information for as long as possible.  Different options can be explored before deadlines come, and delaying the process like this makes sure that the appropriate product is deployed.  It helps maintain flexibility within the code until decisions are finalized.

Fast Delivery – Despite this being a goal of every programmer (if you ask them about it) it is not always a reality.  The fastest-moving companies are not always the most successful, but the most successful companies all move fast.  A fast delivery also means that there is less time for managers and clients to change their minds.  Software development can be as rapid as possible when the right team of people learn to communicate and are given the time and space they need to work efficiently.

Team Empowerment – A lean team should be motivated to do its best, and this means that managers need to respect their needs.  Programmers should not be overloaded with tasks, and they should be able to establish their own reasonable workflow.  Overall, the people who do the work should have a say in the decision making

Built-In Integrity – High-quality code should always be the goal.  A few ways to ensure that bugs and error messages do not make it into the final cut are pair programming as mentioned above, continual test-driven development, creating small modules of code, and automating when possible.  Products like Airbrake, a leading software tool for detecting errors in web and mobile apps, have taken this aspect of the lean philosophy to heart.  This results in a product that is well-built and a pleasure to use.

A Vision of the Big Picture – Lean development teams need to be able to see their project as a whole system and not get caught up in individual parts.  All goals and mini-goals need to be created with the entire concept of the project in mind.  By focusing too much on something like an unreasonable goal from a customer, code can be written haphazardly and bugs creep in.

These seven principles guide the software development process to be as efficient as possible while providing the maximum value to the customer.  Nothing necessary is sacrificed – instead, smart workflow design and the right attitude combine to produce high-quality results.