Posts tagged: methodology

Jul 21 2009

Lessons in Software Development From the Apollo Moon Missions.

apollo11_launch
Monday was the 40th anniversary of the Apollo 11 lunar landing. The story of the Apollo program is an historic and inspirational one, but it’s also relevant to software development.

To understand the significance of the Apollo program from an engineering standpoint, we must begin at the beginning…
Gus Grissom, Ed White and Roger B. Chaffee were killed on the launch pad when the Apollo 1 capsule burst into flames just prior to the launch test. What happened? Well, according to Wikipedia (I know, far from an unimpeachable source, but bear with me here):

“Although the ignition source of the fire was never conclusively identified, the astronauts’ deaths were attributed to a wide range of lethal design hazards in the early Apollo command module. Among these were the use of a high-pressure 100 percent-oxygen atmosphere for the test, wiring and plumbing flaws, flammable materials in the cockpit (such as Velcro), an inward-opening hatch that would not open in this kind of an emergency and the flight suits worn by the astronauts.”

In short, no one knows for sure what specifically caused the fire, but everyone agrees that some fundamental errors led to the conditions (whatever they ultimately were).

what really went wrong was at the planning and design stage. NASA was in such a rush to make up lost time in the space race with the USSR, that they got cocky after early successes, cut corners and went full bore toward a fully manned, Apollo capsule before they were really ready.

The precursor missions to Apollo were the Mercury and Gemini projects. These projects had highly specific mission statements and each was directed toward a discrete piece of the overall lunar landing mission. Project Mercury was directed toward getting a man into space, and back again. The goal of project Gemini was to perform extra-vehicular activity (pre-cursor to space walk), and docking maneuvers.

NASA began the mission to the moon with an iterative approach, but switch to a more waterfall like approach where they tried to construct a whole new capsule module from scratch, with the intent of landing on the moon and returning. They used the knowledge gained from the earlier Mercury and Gemini projects, but constructed new - and untested - equipment for Apollo.

The parallel to software development is using an iterative approach to develop phase I of a project, only to throw it away and start over on phase II. The whole purpose of the iterative approach is to focus on small, achievable parts of a greater whole to maintain momentum but also to limit what must be tested and hence limit (theoretically) the universe of possible bugs.

I think the 2 most important software development lessons we can learn from the Mercury, Gemini and Apollo missions are:

  1. To be successful, have clear and concise mission objectives (goals).
  2. Start small, and build on each success.

This is what made the Gemini and Mercury missions so successful, and ultimately made Apollo 11 possible and it will drastically improve the odds of your next software project being a success as well.

Blog Traffic Exchange Related Posts Blog Traffic Exchange Related Websites
  • Rookie and Beginner Woodwork Projects Just like with many other types of jobs, when it comes to woodwork projects, planning is of the utmost level of importance. Cutting wood and working with wood is always going to demand that you utilize careful planning and a step by step approach toward reaching the ultimate goal for......
  • Advantages of software developers in freelance contract programming In any reputed software development firm the software developers are usually very experienced and expertise, but only in their own modules. In a recent survey it has been found that software developers do not wish to work in different modules in the same or a different project. As these developers......
  • How Home Improvement Software Can Help You Out If you are interested in home improvement these days, you also need to be interested in what the modern world can do for you as far as home improvement is concerned.  There is no type of handyman in today’s world that does not use the conveniences of modern technology to......
  • Offshore software development services have been developed with challenging tasks for many years With the advent of Quality System Standards, outsourcing firms as well as the outsourcer have to accomplish different objectives regarding the quality of the software. To sustain itself in the tough competitive field, businesses need to be exceptionally good in quality, promptness and accuracy. Today, there are many firms that......
  • Progress in Software Development – Scaling New Heights Software development is no less than a revolution in the history, as it has entered each and every profession and industrial field. The demand for variety of software systems is experiencing high times and the credit goes to four different set of individuals. The following discussion will highlight the contribution......
Jul 14 2009

The 3 Most Important Questions You Should Ask About Each Bug You Find.

I stumbled upon (quite literally) an article by Tom Van Vleck titled Three Questions About Each Bug You Find today, and thought I would share it:

“The key idea behind these questions is that every bug is a symptom of an underlying process. You have to treat the symptoms, but if all you do is treat symptoms, you’ll continue to see more symptoms forever. You need to find out what process produced the bug and change the process. The underlying process that caused your bug is probably non-random and can be controlled, once you identify what happened and what caused it to happen.”

Tom uses these questions to get to the heart of the matter and weed out the root cause of the bug.

1. Is this mistake somewhere else also?

You want to know if this bug was unique, or due to a problem in a pattern of approach to the specific problem. If it’s unique, you can move on to the next question, but if it’s systemic, you’ll need to address your approach to the development problem the code was intended to solve and devise a new pattern or correct the one in place.

2. What next bug is hidden behind this one?

Often times a bug will either halt the execution of code, or cause the lines after the bug to be bypassed. once you fix the bug, those other lines of code will begin to execute. Be sure to check those for any bugs. Also, consider whether your fix to this bug could cause any new bugs to be introduced.

3. What should I do to prevent bugs like this?

Learn from this mistake. Could the problem be avoided by adding a new test condition to your NUnit test(s)? Should you implement a change to your pattern to check for null reference or out of bounds exceptions sooner? Bugs happen, but if you can use them as teachable moments and learn from them, then they will at least provide some value and make you less likely to run into the same bug in the future.

It’s not always an easy process, mostly because it requires a sort of detached introspection and willingness to be critical and objective when looking at your work. These character traits are not always in high supply, and we humans can often get in the way, but if you can master these techniques you will go far young padawan.

Blog Traffic Exchange Related Posts Blog Traffic Exchange Related Websites
  • Open Source: The Importance in the New Millenium What is Open Source? Generally, open source signifies any program for which the source code is available for modification or change by the developers according to necessity. It is chiefly available for public use and therefore people are free to use it. As a Certification Mark: Open Source is regarded......
  • Now available: Android 1.6 NDK Today Android 1.6 NDK, release 1 is available for download from the Android developer site. To recap, the NDK is a companion to the SDK that provides tools to generate and embed native ARM machine code within your application packages. This native code has the same restrictions as the VM......
  • Android SDK Updates Today we are releasing updates to multiple components of the Android SDK: Android 2.0.1, revision 1 Android 1.6, revision 2 SDK Tools, revision 4 Android 2.0.1 is a minor update to Android 2.0. This update includes several bug fixes and behavior changes, such as application resource selection based on API......
  • You might be a nurse if... your friends call you for medical advice. ( lloyd , avatarj@mindspring.com ) discussing dismemberment over a gourmet meal seems perfectly normal to you (Mary) you have the bladder capacity of five people you have your weekends off planned for a year in advance you believe that "ask-a-nurse" is an......
  • Early Breast Cancer Detection Breast cancer detection can be difficult because the symptoms associated with breast cancer are capable of varying quite widely. Some people experience lumps while others experience swelling, and other people experience changes in their skin. Many people that have breast cancer do not experience any obvious symptoms at all, and......