tag:blogger.com,1999:blog-7808693299443090645.post-10733546305483700932007-06-11T13:44:00.000-07:002007-06-11T13:45:24.116-07:00I want a revolution (every twenty years)<p class="MsoNormal">When I was in school, I was in the midst of a revolution. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">Software was engineering, and they were going to do it right.<span style=""> </span>Doing software “right” had been the Top Down Software Process model, and it was Dogma.<span style=""> </span>The revolutionaries wanted the Water Fall Process model. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">The very first process model was the Heroic model.<span style=""> </span>The “heroes” were math PhD’s and electrical engineers brainstorming how to make computers work for the first time.<span style=""> </span>Computers came out of the effort to win World War II. <span style=""> </span>Computers were labor saving tools for mathematicians working on trigonometric artillery tables.<span style=""> </span>Later, computer technology began to incorporate control theory from aviation.<span style=""> </span></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">AT&T, the heavily regulated telephone monopoly, used computers to compress even more customer calls into its widely installed base of wires and call centers, thus driving down their cost and increasing profits without having to get an Act of Congress.<span style=""> </span></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">But the Heroic process model did not scale to larger problems. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">By the 1960’s, computers were a big business.<span style=""> </span>Software to control the computers was being written to solve large, complex problems.<span style=""> </span>There was a lot of money, equipment, or lives at stake.<span style=""> </span>There were spectacular project failures.<span style=""> </span>Rockets flew off course.<span style=""> </span>Phone calls were noisy or not there at all.<span style=""> </span>Software was delivered late, buggy, or not at all.<span style=""> </span></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">A new generation of wise men of computers devised a revolution. They replaced the Heroic process model <span style=""> </span>with the Top Down Process Model:</p> <p class="MsoNormal">1) gather requirements from customers </p> <p class="MsoNormal">2) decompose the problem into functionality to meet the requirements </p> <p class="MsoNormal">3) design modular systems to meet the functionality</p> <p class="MsoNormal">4) implement the design</p> <p class="MsoNormal">5) test </p> <p class="MsoNormal">6) document</p> <p class="MsoNormal">7) maintenance</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal"><span style=""> </span>The Top Down Process scaled to larger problems than the Heroic model of just putting a bunch of smart guys in a room and hoping for the best.</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">As time went on, the space race drove software to new heights with the need for solving problems dealing with complex orbital math, control, and communications.<span style=""> </span>Also, computers started to be used in commerce in a very bid way.<span style=""> </span>Banks and stock markets realized that computers could record large volumes of transactions quickly, cheaply, and accurately. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">The apex of the Top Down model was CASE (Computer Aided Software Engineering) in the early 1980’s.<span style=""> </span>The idea was that you could have a design that was so good, so clear, and so coherent that you could capture it all in “The Tool,” push a button, and a working system would pop out the back end.<span style=""> </span>This idea was very popular with large software customers like the Defense Department, which had spent hundreds of millions of dollars on systems that, in the end, didn’t really do everything that the DoD wanted.<span style=""> </span></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">Twenty years had passed.<span style=""> </span>There were spectacular failures.<span style=""> </span>Banks lost track of money. Radar systems would not talk to the alert system, which would not talk to the missile systems.<span style=""> </span>Software was delivered late, buggy, or not at all.</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">In the 1980’s, a new generation of wise men of computers devised a revolution, the Waterfall Process model:</p> <p class="MsoNormal">1) gather requirements from customers </p> <p class="MsoNormal">2) decompose the problem into functionality to meet the requirements </p> <p class="MsoNormal">3) design modular systems to meet the functionality</p> <p class="MsoNormal">4) implement the design</p> <p class="MsoNormal">5) test.</p> <p class="MsoNormal">6) iterate: if not done goto 1</p> <p class="MsoNormal">7) document</p> <p class="MsoNormal">8) maintenance</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">Step 6, planned iteration, was a big deal.<span style=""> </span>They were dealing with the scaling problem by admitting that problems are large and complex and you could not just be “smart enough” and design it right the first pass.<span style=""> </span>Plan to iterate.<span style=""> </span>Design, build, test, repeat. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">The RAD (Rapid Application Development) was the vanguard of the model. <span style=""> </span>If you do your software in this rapid iteration, you would arrive at a working solution in an economically feasible amount of time.</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">Huge and important systems were developed.<span style=""> </span>A personal computer with word processing, spread sheets, and email went onto the desk of nearly every office worker.<span style=""> </span></p> <p class="MsoNormal">The internet with email and the web revolutionized commerce and communication.<span style=""> </span>Google organized and indexed the internet and effectively made everyone smarter. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">Twenty years passed.<span style=""> </span>The problems scaled larger.<span style=""> </span>There were spectacular failures.<span style=""> </span>The internet is full of security threats from crooks.<span style=""> </span>The FBI could not get its case files into the hands of the agents and law enforcement. <span style=""> </span>The <st1:place st="on">Vista</st1:place> operating system was delivered years late and with many of its original features removed.<span style=""> </span>Software was delivered late, buggy, or not at all. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">In the 2000’s, another generation of wise men of computers had a revolution, Agile Development:</p> <p class="MsoNormal">1) gather requirements from customers </p> <p class="MsoNormal">2) re-factor the problem into functionality to meet the requirements </p> <p class="MsoNormal">3) write automatic tests </p> <p class="MsoNormal">4) implement the design</p> <p class="MsoNormal">5) iterate: if not done, goto 1</p> <p class="MsoNormal">6) document</p> <p class="MsoNormal">7) maintenance</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">The software design phase was compressed even further.<span style=""> </span>Testing moved from step 5 to step 3.<span style=""> </span>The iteration cycles are even shorter than RAD. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">Good software is being written this way.<span style=""> </span>Automatic testing is a very powerful tool for writing modular code with good interfaces.<span style=""> </span>It allows our projects to be robust in the face of change. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">So every twenty years a new generation of wise men have advanced the state of the art with a revolution:</p> <p class="MsoNormal">Heroes of computers in the 1940’s</p> <p class="MsoNormal">Top Down model in the 1960’s</p> <p class="MsoNormal">Waterfall in the 1980’s</p> <p class="MsoNormal">Agile in 2000’s</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">Each revolution had to live with and accommodate the old way of doing things because they worked for a given class and size of problems.<span style=""> </span></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">But the problems will continue to grow in size and complexity.<span style=""> </span>Agile programming makes testing a core principle, and that is good. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">However, I think that in fifteen to twenty years, a new generation of wise men of computing will stage a revolution.<span style=""> </span>A new process model will replace Agile as we get to the limits of what it can do.<span style=""> </span>Unit testing code, even with 100% code coverage, does not mean you test 100%, 50%, or even 10% of the states and interactions of the code.<span style=""> </span>Multi-threading and distributed computing will make the systems larger and more diffuse, and the complexity of the interactions will dominate the complexity of a single component.<span style=""> </span>We want to be able to change parts of large distributed systems while they are still running - how do you test that completely?<span style=""> </span>Software will get delivered late, buggy, or not at all. </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">Around 2020 or so, a new generation of wise men of computing will have to have a revolution.<span style=""> </span>The problems will have scaled and we will have to do something new. </p> <p class="MsoNormal"><span style=""> </span></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">Viva La Revolution!</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal"><o:p> </o:p></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7808693299443090645-1073354630548370093?l=classysoftware.blogspot.com'/></div>Karl Meissnerhttp://www.blogger.com/profile/02883277703620699826noreply@blogger.com1