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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值