Software developers are often asked to describe their “methodology.”

You get a variety of answers to this question. Some talk about a version of the “lightweight” or “agile” approach to development. Others describe something similar to the Rational Unified Process. Still others say their methodology is shaped to fit the size and nature of each specific project, and uses elements from both the lightweight and heavyweight schools.

But behind this question “what is your methodology” is mostly a desire to know where you stand as a developer, how you see the process, whether you really understand getting from A to B, from need to solution. What makes you different? Do you know what you’re doing? Can you handle complexity? Risk? Does your process respect budgets and timeframes? How? In other words, “please say something to convince me I can trust you with my goals, my time, my budget, my desire for a very successful project.”

So that’s what we’ll try to do.

The purpose of any methodology is to reach specific objectives. Unless we’re clear about objectives, we can’t judge efficacy of methods.

Eagle’s starting point is to acknowledge our intention to create software which:

  • meets the functional needs of users
  • is easy to use with minimal training
  • is reliable
  • has good performance
  • is cost-effective
  • is completed within an acceptable timeframe
  • is maintainable and can evolve gracefully over time

Certain principles are common to all methodologies. It’s important for us as developers to understand them as principles, because these are elements of the process that must not be compromised, even though details of their application may vary with the demands of each project.

These are principles which we have learned over the course of our careers and hundreds of projects. At first glance they may seem too simple, too obvious or too naive to receive the status “principles underlying all software development.” But we think that in the actual practice of software development they are not so simple or obvious, and not so easy to put into practice consistently.

  • Understanding. Reaching a valid understanding of stakeholder needs is fundamental. This includes a completely accurate understanding of the vocabulary of the “problem domain,” the functional behavior needed, how the software is to be used, and so forth. Every successful methodology must include the obligation of developers to gain this understanding and to document it so that client and developers share an explicit, common knowledge of the problem domain as it relates to the system being developed.Yes, there are the usual observations that development is iterative, that stakeholders are participating in a “discovery” along with the developers, and of course that is true. It is also true that that must not become an excuse for accepting unnecessary compromises in “understanding.” You do so at your own risk. Ultimately, if the project is to be successful, understanding must be achieved. You can do it sooner or you can do it later. It costs much less and leads to much higher quality if understanding is gained at the earliest possible stage of the project.
  • Verification. Developers cannot take anything for granted. Incorrect assumptions can be corrected easily at the beginning of a project, but can be expensive or fatal if discovered at the end. This refers to all aspects of a software project, including project goals, hardware/network performance, and efficacy of third-party software components, as well as estimated effort, timeframe and cost. All questions and assumptions must be investigated, and the conclusions should be part of the system’s written documentation.
  • Order. It is often (always?) tempting to begin a new activity before its prerequisite has been completed. For example, to design before finishing discovery and requirements analysis, or to code before completing a design specification. In order for code to be right, an appropriate design must be completed first, and in order for the design to be right, requirements must be understood. This can be a subtle issue because effective development methodologies are iterative and adaptive, which means that all requirements are not necessarily completed before beginning design, and all design is not necessarily completed before beginning implementation. But within specific threads of development, it is essential to respect the necessary order of development.
  • The ultimate priority. Every aspect of a project—including “methodology” and “principles” as well as specific work product—must be measured against the objectives mentioned earlier. For example, during implementation a decision based on the convenience of a programmer may create an inconvenience that users will have to live with for years. Or a decision which makes sense from a strictly technical point of view may impair the usability, reliability or maintainability of a system for its entire life. While project cost and duration are always important, decision-making needs to respect the full set of project objectives—especially the quality of the final product from the user’s point of view.

Copyright (c) 2005 by Eagle Research, Inc.
"Software for the Internet age" is a registered trademark of Eagle Research, Inc.

Home    |    About Eagle    |    Services    |    Experience    |    Methodology    |    Something Different    |    Site Map    |   Contact Us