Patterns of successful software projects (part 1)

转载 :Patterns of successful software projects (part 1)

A short introduction to my framework for successful projects, using terminology from the pattern literature. Future posts will expand on these topics.

Definition of “successful“

There are five basic truths that make a successful software project: regardless of what development environment or programming language is used, no matter whether it is managed using an “agile“ or a waterfall process, OO, SOA, AI or punch cards.

They are:

  1. The customer/user has a reason for the project (based on their need, a demonstrated ROI, “it sounds cool“, etc)
  2. The developers know what they are building (there is some mechanism for requirements specification)
  3. The developers know how they are to do it (knowledge and usage of tools and “process“)
  4. The development team will know when they are done (there exists some “exit“ milestone criteria)
  5. The customer/user agrees (they accept or purchase it)

My claim is that all software project “failures” can be traced back to a violation of one or more of these.

Forces on software projects

There are a number of “forces” on a software project.

These include (but are not limited to):

  1. Level of business/customer satisfaction—functionality, usability
  2. Time-to-market—deadlines, milestones, marketplace, competition
  3. Development team self sufficiency—technology/knowledge, resources
  4. Expected return on investment (and timeframe)—value, tangible, intangible
  5. Developer's community of understanding—shared knowledge, sharing mechanism
  6. Need for efficiency and predictability—estimate accuracy, resource usage
  7. Development organization's culture—risk tolerance, “learning” organization

Control

Finally there are various elements that the development team can control. They include:

  1. Development technology/tool (team's familiarity with, effectiveness of, appropriateness for solution)
  2. Technical support for technology/tool (mentors, training, collaboration)
  3. Team size/composition and geographical locality (includes skill sets, team organization, and management)
  4. Iteration length (of any defined milestone, e.g., including release schedule; for continuous hacking, Length = 0, for waterfall, Length = Infinite (or “all of it“, there is no iteration)
  5. Formality (artifacts, models, documentation, process mechanisms)

I propose that:

  1. Software development must balance the forces using the control mechanisms
  2. There are a number of patterns that “solve“ the balance
  3. Different tools and technologies can make this easier or harder
  4. A particular “balance point“ for a given project may “move“ in the force space as the project progresses
  5. Different tools and technologies can help or hinder balance control

你可能感兴趣的:(开发技术)