930 likes | 1.13k Views
Keys to Software Success. Software processes that work. Agenda. Day 1. Universal Laws History of Software First Key Practices Discussion Remaining Key Practices Discussion. Day 2. Gods of Software. Deming. Poppendiecks. Beck. Brooks. There are a lot of “good” laws. E=mc 2.
E N D
Keys toSoftware Success Software processes that work
Agenda Day 1 • Universal Laws • History of Software • First Key Practices • Discussion • Remaining Key Practices • Discussion Day 2 Keys to Software Success
Gods of Software Deming Poppendiecks Beck Brooks Keys to Software Success
There are a lot of “good” laws E=mc2 If anything can happen, it will. Do onto others… Keys to Software Success
But they aren’t Universal Laws h/2π ? E≠MC2 Do onto others….? Thou shall not commit adultery? Keys to Software Success
Universal Law #1 The Universe is infinitely complex At least, reality >> human brain capacity • At the particle level, we even know what causes gravity. • At the astronomical scale, we don’t even know if the universe is open or closed. • At the human scale, we can predict the interaction of two billiard balls, but not three. • All the computers in the world can not predict what a single person will choose for lunch. Keys to Software Success
Dealing with Complexity • Humans make simplified models of complex systems. We can understand the models, and we hope they are close to reality, but don’t pretend they are real. • We decompose complex systems into pieces and those pieces into pieces until we get to pieces simple enough to model. Keys to Software Success
Universal Law #2 All Complex systems need feedback to remain stable. • In biological systems, half of the components are there to balance the other half. • In economic systems companies fail with the wrong business model, and grow with the right model. • In political systems your career ends if you can’t get people to re-elect you. There aren’t any big systems without significant feedback loops! Keys to Software Success
Dealing with Dynamics • Humans can construct complex systems, but they can not hope to micro-manage them. • Like the stable systems in nature, you have to introduce feedback loops. • If you become unstable, add feedback. • If you become immobile, decrease feedback. Keys to Software Success
Universal Law #3 Entropy causes information to rot • That sweet application you wrote last year does not look familiar to you any more. • The detailed spec they wrote two months ago needs dozens of changes. • The feature that was most critical when the project started is now priority number eight. • Writing it down stops if from rotting in your head, but then it rots on paper. Keys to Software Success
Dealing with Entropy • The less time it takes to finish a task, the less information will rot. • The fewer tasks you have at once, the less information you will have to hold in your head. • If you write it down, you will have to maintain it. Information rots, wherever it is recorded, but paper may rot more slowly that what is in your head. Keys to Software Success
History of Programming Hacking ??? Kanban Lean Scrum XP RUP Rapid prototyping OOP TSP/PSP Structured Programming CMMI CMM Productivity The Navy Way 6 Sigma PMBOK Junk (First Software) Time Keys to Software Success
9 Keys to Success • Continuous Improvement • Eliminate Waste • BDUF / Small Bites / Agility / Change • Flow / Work In Progress • Team Agility • Continuous Integration • Configuration Management • Build Tools • Test first / Automate Testing Keys to Software Success
1 Continuous improvement Move forward or die! Keys to Software Success
Continuous Improvement • Change is painful • You can’t get better if you don’t change. • Try to learn something from everything you do. • Constantly try things that would have prevented past problems. • Find a way to measure if changes make things better or worse. Keys to Software Success
Continuous Improvement The Deming cycle is a very powerful example of feedback Keys to Software Success
Continuous Improvement Locking in a standard process that can not be changed means there can be no improvement. There are no standards, no mythologies, no theories that you can not improve upon. Keys to Software Success
Continuous Improvement The Deming cycle tells you to measure results, and then optimize them. Be careful of what you measure! • If you measure busyness, you will get busyness not work. • If you measure documents written, you will get documents, not products. • Measure the things customers will pay for, and the time it take to make them. Keys to Software Success
Review of Continuous Improvement • When can we stop all these changes? Processes will slowly get worse if you don’t invest in figuring out what is wrong and fixing it. [law #2,3] Keys to Software Success
2 Waste The stuff you make, but don’t use is killing your schedule and budget. Keys to Software Success
Waste • Features that no one uses • Documents that no one reads • Leaving tasks half done, (to rot) while you do other things • Inefficient communication • Debugging Keys to Software Success
Waste • Find the sweet spot. • Use science not philosophy to find it. Sweet Spot Hacking BDUF No overhead Few tools Little QA Lots of planning Formal methods Many documents Rework costs Planning costs Keys to Software Success
Waste Scrum and some other Agile methodologies require detailed estimation to make every sprint the same size. This is waste. Measuring features delivered over time tells you everything you need to know. Keys to Software Success
Review of the Waste • What is the easiest way to improve productivity? Only invest effort in what has value.…. [based on simple accounting rules] Keys to Software Success
3 Big Design Up Front The idea is that you can save time and money later by thinking smarter now. Keys to Software Success
Big Design Up Front But humans are not smart enough to do it. Keys to Software Success
Big Design Up Front • Nobody knows what they really want. • Nobody is smart enough to precisely specify anything complex. • Few people can imagine the details of a system they can’t try. • Needs change and keep changing, so if you did ever get everything right, it is wrong now. Keys to Software Success
Big Design Up Front Keys to Software Success
Big Design Up Front One excuse for a big design is to support maintenance. The Big Spec. you wrote to start the project can not describe how you built it. Don’t try to morph it into a maintenance document. Start a new maintenance document after you know what you build. Keys to Software Success
Big Design Analogy: Cannon Fire • You have an old cannon, a barrel of cannon balls and a barrel of gun powder. Hit the target with a cannon ball. Keys to Software Success
Big Design Analogy: Cannon Fire Keys to Software Success
Big Design Analogy: Cannon Fire • On the other hand, if you just shoot the cannon a few times, you are likely to get it by trial and error in a few tries. (Ready, Fire, Aim) Keys to Software Success
BDUF - Small Bites “Economies of scale” is a dangerous concept. Making things bigger can make them useless. Keys to Software Success
BDUF alternative - Small Bites Small bites flow. Big bites hurt, and they might kill you. Keys to Software Success
BDUF alternative - Small Bites • Build one feature at a time. • Design it, Code it, Integrate it, Test it, Release it. • Break big features into little ones. • This is where the art comes in. • It isn’t done until it is integrated and tested, and maybe released. • Add new features to systems that work. Keys to Software Success
BDUF alternative - Agility • The old rule was to get the customer to sign the plan, and then to deliver what they signed for, whether it is what they need or not. • Now, you want the customer to tell you what is wrong with the plan. You want to deliver what the customer needs. Keys to Software Success
BDUF alternative - Agility • You can’t afford to finish the whole project and then have the customer say, “No, that’s not right. Start over.” So, you have to deliver in small increments. • If they like most of what you give them, you can calculate how long it will take to give them what they need. • If they don’t like what you are delivering, you can “cut bait” early or have an executive conference while there are resources left. Keys to Software Success
BDUF alternative - Agility The majority of requested features are never used. This is your chance to manage your customer. If they have gotten what they need, they may not want to extend the project to get more features. Keys to Software Success
BDUF - Change Tolerant Software • Chances are, you will be forced to make many changes to your module before the test team and the customer like it. • Don’t insist on making it right (you don’t even know what right is yet.) Make it flexible. • Preserve ease of use, security, and simplicity, but sacrifice efficiency to get flexibility. Keys to Software Success
BDUF - Change Tolerant Software • Low dependence between modules - They used to call it information hiding, but it is really all about protecting your module from someone else's changes. Keys to Software Success
BDUF - Change Tolerant Software • Interfaces -Be rigorous in your specification, communication and preservation of interfaces. Keys to Software Success
BDUF - Change Tolerant Software • Object Orientation -Each device, database, user interface, or external software needs to have a isolated interface, so that anything can be changed without effecting more than one object. Keys to Software Success
BDUF - Change Tolerant Software Object oriented languages support encapsulation which helps to simplify your software by separating into chunks. But Inheritance and Polymorphism can sometimes add complexity. Use them carefully. Keys to Software Success
Big Design Up Front • Do just enough design up front • Implement the project in small steps • Learn from the current step, before you plan the next step. • Each step should deliver value. • The steps reduce the surprises and risk. Keys to Software Success
Review of the BDUF • Why can’t we plan everything before we start? We could be more efficient with a plan. Because we are not smart enough, and guessing doesn’t help. [law #1] What they said they wanted is not what will make them happy. [Law #1,3] Keys to Software Success
Review of the BDUF • Why don’t we start huge projects? Because they don’t provide feedback fast enough, and get killed before you can finish them. [law #2] Keys to Software Success
4 Flow “Economies of scale” is a dangerous concept. More and faster can lead to chaos. Keys to Software Success
Flow Tight feedback between train cars allows hundreds of cars to travel together Keys to Software Success
Flow Figure where the “tracks” run. Keep things moving, but don’t allow pile-ups. Try to eliminate waiting time. Faster is better. Faster delivery means faster feedback. Keys to Software Success
Work In Progress The work that youare scheduled to docan get in the wayof the work youare supposed tobe doing now. Keys to Software Success