Lean

That’s umbrella which represents a formal way that we can stand aiming to be pratical, reducing complexity in the way we act, in the way we think, work and make decisions.

Lean Software Development is the parenthood of Agile Software Development methods and has branches like Scrum or Crystal Clear.

Lean Software Development – from Concept to Cash”, Mary and Tom Poppendieck explain how to implement Lean by following seven principles – that principles I took at heart:

  1. Eliminate Waste
    • Provide market and technical leadership – your company can be successful by producing innovative and technologically advanced products but you must understand what your customers value and you know what technology you’re using can deliver
    • Create nothing but value – you have to be careful with all the processes you follow i.e. be sure that all of them are required and they are focused on creating value
    • Write less code – the more code you have the more tests you need thus it requires more work and if you’re writing tests for features that are not needed you are simply wasting time
  2. Create Knowledge
    • Create design-build teams – leader of the development team has to listen to his/her members and ask smart questions encouraging them to look for the answers and to get back with encountered problems or invented solutions as soon as possible
    • Maintain a culture of constant improvement – create environment in which people will be constantly improving what they are working on – they should know that they are not and should not be perfect – they always have a field to improve and they should do it
    • Teach problem-solving methods – development team should behave like small research institute, they should establish hypotheses and conduct many rapid experiments in order to verify them
  3. Build Quality In
    • Synchronize – in order to achieve high quality in your software you should start worrying about it before you write single line of working code – don’t wait with synchronization because it will hurt
    • Automate – automate testing, building, installations, anything that is routine, but do it smartly, do it in a way people can improve the process and change anything they want without worrying that after the change is done the software will stop working
    • Refactor – eliminate code duplication to ZERO – every time it shows up refactor the code, the tests, and the documentation to minimize the complexity
  4. Defer Commitment
    • Schedule Irreversible Decisions at the Last Responsible Moment – you should know where you want to go but you don’t know the road very well, you will be discovering it day after day – the most important thing is to keep the right direction
    • Break Dependencies – components should be coupled as loosely as possible to enable implementation in any order
    • Maintain Options – develop multiple solutions for all critical decisions and see which one works best
  5. Optimize the Whole
    • Focus on the Entire Value Stream – focus on winning the whole race which is the software – don’t optimize local inefficiencies, see the whole and optimize the whole organization
    • Deliver a Complete Product – teams need to have great leaders as well as great engineers, sales, marketing specialists, secretaries, etc. – they together can deliver great final products to their customers
  6. Deliver Fast
    • Work in small batches – reduce projects size, shorten release cycles, stabilize work environment (listen to what your velocity tells you), repeat what’s good and eradicate practices that creates obstacles
    • Limit work to capacity – limit tasks queue to minimum (one or two iterations ahead is enough), don’t be afraid of removing items from the queue – reject any work until you have an empty slot in your queue
    • Focus on cycle time, not utilization – put in your queue small tasks that cannot clog the process for a long time – reduce cycle time and have fewer things to process in your queue
  7. Respect People
    • Train team leaders/supervisors – give team leaders the training, the guidance and some free space to implement lean thinking in their environment
    • Move responsibility and decision making to the lowest possible level – let your people think and decide on their own – they know better how to implement difficult algorithms and apply state-of-the-art software frameworks
    • Foster pride in workmanship – encourage passionate involvement of your team members to what and how they do

This brief introduction is not enough. Have Marry’s books and delight yourself.

%d bloggers like this: