This is probably the best book I’ve read about software development processes. Below are some points that were the most interesting. Each of those is explained in the book in length, so those are rather “bookmarks” to keep in mind.
Pull system in software development. Based on Toyota, Scrum uses a pull system that eliminates bottlenecks (Muri) – developers take what they need off the product backlog – and avoids stress (Mura) – developers never take more than they can get done in a Sprint. This leans out the environment causing impediments that create waste (Muda) highly visible. In such environment people should not work around problems. Problems should trigger to stop-the-line and search for the root cause.
Principles vs. practices. Principles are underlying truths that don’t change over time or space, while practices are the application of principles to a particular situation. Copying practices without understanding the underlying principles has a long history of mediocre results.
Software development process. Embedded software is the part of a product that is expected to change. If it didn’t need to change, then it might as well be hardware. We believe that any development process that deals with a changing environment should be an empirical process, because it provides the best known approach for adapting to change.
7 principles of lean software development: eliminate waste, build quality in, create knowledge, defer commitment, deliver fast, respect people, optimize the whole.
7 myths: early specification reduces waste, the job of testing is to find defects, predictions create predictability, planning is commitment, haste makes waste, there is one best way, optimize by decomposition.
7 wastes: partially done work, extra features, relearning, handoffs, task switching, delays, defects.
Mapping the value stream. Value stream maps always begin and end with a customer. The value stream map is a timeline of the major events that occur from the time the clock starts until it stops. The objective of lean is to reduce the development timeline by removing non-value-adding wastes. Pick the biggest delays or the longest queues or the worst churn and address it first.
Achieving speed in software development process through reducing cycle time: even out the arrival of work, minimize the number of things in process, minimize the size of things in process, establish a regular cadence, limit work to capacity, use pull scheduling. If something is difficult, do it more often, and you’ll get a lot better at it.
Mature organization. The measure of a mature organization is the speed at which it can reliably and repeatedly execute its core processes.
Teamwork. Share early and share often. Test early and fail fast. With people, the things that matter are skill, pride, expertise, confidence, and cooperation. A crew boat is narrow, goes fast, turns slowly, and tips easily. A crew team has to concentrate hard on working together just to stay dry. Racing in water is all about current, wind, drag, and strategy. Consistently synchronized power is essential in order to keep the boat motion smooth and conserve energy for the final push. to win races, the rowers must first of all be excellent athletes, and secondly, they have to focus on synchronizing their efforts with their teammates every time they work out.
The visual workspace. Airports are amazing places, especially hub airports. You can land on one airplane and leave on another a couple of hours later without talking to anyone, logging into a computer, or making a phone call. It’s your job to get yourself from your arriving aircraft to your departing aircraft on time, without any help from people, technology, or communication devices. Instead of having someone or something tell you how to do your job, the airport makes it easy for you – and all the other people milling about the airport – to figure it out for yourself.
Deming’s 14 Points (this just too good to leave out, but also too long to mention all of them so here are a few): don’t choose suppliers on the basis of low bids alone – minimize total cost by establishing long-term relationships with suppliers that are based on loyalty and trust, institute training – manager should know how to do the job they supervise and be able to train workers, institute leadership – the job of managers is to help people do a better job and remove barriers in the system that keep them from doing their job with pride, drive out fear – people need to feel secure in order to do their job well, do not undermine team cooperation by rewarding individual performance, encourage education and self-improvement for everyone, a top management team must lead the effort with action, not just support.
Problem solving (deja vu from The Lean Startup): define the problem, analyze the situation, create a hypothesis, perform experiments, verify results, follow-up/standardize.
Discipline. You can’t go fast without building quality into the product, and that takes a lot of discipline. To a small and rapidly growing company that hasn’t thought much about quality, becoming lean means becoming very disciplined about the way software is developed.
The 5 S’s for Java: sort – reduce the size of the code base (throw away all unneeded items immediately), systematize – organize the projects and packages, shine – clean up (unit test pass rate == 100%, test coverage > 80%, improve performance, etc.), standardize – once you get to a clean state, keep it that way, sustain – use and follow standard procedures.
Quality checklist: standardized architecture, standard tools, coding conventions, configuration management, automated unit tests, automated acceptance tests, one-click build and test, continuous integration, automated release, automated installation.
Outsourcing & partnerships: are not about cost reduction, it is not about risk reduction, it’s not event about adding capacity. It’s about creating a synergy. It’s about coming to the realization that by rowing together, the companies can get to the finish line faster than even the strongest of them could manage alone.
Tips for work groups separated geographically: frequent integration, exchange people, exchange tests, proxy, travelling team leader, no second-class citizens.
Contracts. What’s the purposed of contracts? There are two schools of thought on this: 1. to protect each party from opportunistic behavior on the part of the other party. 2. to set up appropriate incentives for companies to work together in a synergistic manner. Relational contracts describe the relationships of the parties rather than the expected results of the relationship. Relational agreements are focused on aligning the incentives of the parties with the good of the joint venture. Relational contracts generally designate a target cost and a target schedule. Both parties agree to work together, using the mechanisms in the contract, to deliver the best possible value within the cost and schedule targets.
That’s it. Congratulations if you’ve read it through! If you haven’t read the book yet, go buy it now, and read it : )