Scope Is the Enemy of Success

Scope Is the Enemy of Success
Dave Quick
SCopE REFERS To A pRojECT’S SizE. How much time, effort, and resources?
What functionality at what level of quality? How difficult to deliver? How much risk?
What constraints exist? The answers define a project’s scope. Soft- ware architects love the challenge of big, complicated projects. The poten- tial rewards can even tempt people to artificially expand a project’s scope to increase its apparent importance. Expanding scope is the enemy of success because the probability of failure grows faster than expected. Doubling a proj- ect’s scope often increases its probability of failure by an order of magnitude.
Why does it work this way?
Consider some examples:
• Intuition tells us to double our time or resources to do twice as much work. History1 says impacts are not as linear as intuition suggests. For example, a four-person team will expend more than twice the communi- cation effort as a team of two.
• Estimation is far from an exact science. Who hasn’t seen features that were much harder to implement than expected?
Of course, some projects aren’t worth doing without some built-in size and complexity. While a text editor without the ability to enter text might be easy to build, it wouldn’t be a text editor. So, what strategies can help to reduce or manage scope in real-world projects?
• Understand the real needs. The capabilities a project must deliver are a set of requirements. Requirements define functionality or qualities of functional- ity. Question any requirements not explained in terms of measurable value to the customer. If it has no effect on the company’s bottom line, why is it a requirement?
1 See The Mythical Man-Month: Essays on Software Engineering, by Frederick Brooks (Addison-Wesley Professional).

• Divide and conquer. Look for opportunities to divide up the work into smaller independent chunks. It is easier to manage several small independent projects than one large project with interdependent parts.
• Prioritize. The world of business changes rapidly. Large projects’ require- ments change many times before they’re completed. Important requirements usually remain important as the business changes, while others change or even evaporate. Prioritization lets you deliver the most important require- ments first.
• Deliver results as soon as possible. Few people know what they want before they have it. A famous cartoon shows the evolution of a project to build a child’s swing based on what the customer said and what various roles in the project understood. The complicated result only faintly resembles a swing. The last panel, titled “What would have worked”, shows a simple swing using an old tire. When the customer has something to try, the solu- tion may be simpler than expected. Building the most important things first gets you the most important feedback early, when you need it most.
Agile advocates2 exhort us to build “the simplest thing that could possibly work”. Complex architectures fail far more often than simpler architectures. Reducing project scope often results in a simpler architecture, and is one of the most effective strategies an architect can apply to improve the odds of success.
相关文章
- git 无法push, 出现: Updates were rejected because the tip of your current branch is behind
- 【BBED】使用bbed解决 the amount of space used is not equal to block size
- [CSS] Change the Alignment of a Single Flexed Item with 'align-self'
- [CSS] Re-order the appearance of grid items using the order property
- [TypeScript] The Basics of Generics in TypeScript
- Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: No outputs for the main artifact of variant: debug
- [HTML5] Show Different Variations of Images Depending on the Viewport Width using Art Direction
- Android开发 Error:The number of method references in a .dex file cannot exceed 64K.Android开发 Error:The number of method references in a .dex file cannot exceed 64K
- What is the usage of getMasterKeyAttributes in configuration.js
- 成功解决ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() o
- 成功解决raise KeyError(f“None of [{key}] are in the [{axis_name}]“)KeyError: “None of [Index([‘age.in.y
- 成功解决AttributeError: Parent variable ‘<Variable: ID (dtype = numeric)>‘ is not the index of entity En
- 成功解决ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() o
- 成功解决NVIDIA安装程序无法继续 Ths OCH driver package is not conmtibIe with the currently uistalled version of
- 已解决WARNING: There was an error checking the latest version of pip.
- 编译webrtc报错:ERROR: The installation of the Chrome OS default fonts failed.
- Android Stdudio 打包Apk签名时出现状态窗口报错提示:Please select at least one of the signature versions to use
- 地平线模型转换报错 ERROR The opset version of th..., only model with opset_version 10/11 is supported.