1 / 91

Keys to Software Success

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.

Download Presentation

Keys to Software Success

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Keys toSoftware Success Software processes that work

  2. Agenda Day 1 • Universal Laws • History of Software • First Key Practices • Discussion • Remaining Key Practices • Discussion Day 2 Keys to Software Success

  3. Gods of Software Deming Poppendiecks Beck Brooks Keys to Software Success

  4. There are a lot of “good” laws E=mc2 If anything can happen, it will. Do onto others… Keys to Software Success

  5. But they aren’t Universal Laws h/2π ? E≠MC2 Do onto others….? Thou shall not commit adultery? Keys to Software Success

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 1 Continuous improvement Move forward or die! Keys to Software Success

  15. 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

  16. Continuous Improvement The Deming cycle is a very powerful example of feedback Keys to Software Success

  17. 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

  18. 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

  19. 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

  20. 2 Waste The stuff you make, but don’t use is killing your schedule and budget. Keys to Software Success

  21. 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

  22. 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

  23. 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

  24. 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

  25. 3 Big Design Up Front The idea is that you can save time and money later by thinking smarter now. Keys to Software Success

  26. Big Design Up Front But humans are not smart enough to do it. Keys to Software Success

  27. 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

  28. Big Design Up Front Keys to Software Success

  29. 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

  30. 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

  31. Big Design Analogy: Cannon Fire  Keys to Software Success

  32. 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

  33. BDUF - Small Bites “Economies of scale” is a dangerous concept. Making things bigger can make them useless. Keys to Software Success

  34. BDUF alternative - Small Bites Small bites flow. Big bites hurt, and they might kill you. Keys to Software Success

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. 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

  41. BDUF - Change Tolerant Software • Interfaces -Be rigorous in your specification, communication and preservation of interfaces. Keys to Software Success

  42. 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

  43. 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

  44. 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

  45. 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

  46. 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

  47. 4 Flow “Economies of scale” is a dangerous concept. More and faster can lead to chaos. Keys to Software Success

  48. Flow Tight feedback between train cars allows hundreds of cars to travel together Keys to Software Success

  49. 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

  50. 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

More Related