|
|
|
Tradeoffs in Shrink-Wrap Software |
|
Patterns of Software Engineering |
|
Anti-Patterns |
|
|
|
|
Time Constraints |
|
Resource Constraints |
|
Feature Constraints |
|
|
|
|
Architectural Constraints |
|
Political Constraints |
|
|
|
|
Architectural Patterns |
|
Organizational Patterns |
|
Development Patterns |
|
|
|
|
Monolithic Application Pattern |
|
Frameworks Pattern |
|
Cross-Platform Framework Pattern |
|
Component Architecture Pattern |
|
|
|
|
|
|
Monolithic Application Pattern |
|
Objective: Develop product with eye towards
time-to-market |
|
Related to: Frameworks, Waterfall Development |
|
Description: Creating single large application
whose main purpose is to develop a product for release. Does not require
modularity, reuse, OOP, etc. |
|
Advantages: |
|
Time-to-market |
|
Shorter design cycles |
|
Drawbacks: |
|
Reduced modularity |
|
Shorter life span |
|
Steep learning curves |
|
Longer QA cycles as product matures |
|
|
|
|
|
|
Frameworks Pattern |
|
Objective: Develop reusable architecture for
multiple products |
|
Related to: Cross Platform Frameworks, Component
Architecture |
|
Description: Create an architecture which
supports common product constructs independent of individual products’
domains |
|
Advantages: |
|
Code reuse |
|
Abstraction of non-product specific code |
|
Increased modularity |
|
Drawbacks: |
|
Longer initial ramp-up development time |
|
Potential conflicting requirements |
|
Platform improvements require extra development |
|
|
|
|
|
|
Cross-Platform Framework Pattern |
|
Objective: Develop reusable architecture for
multiple products on multiple OSs |
|
Related to: Platform Frameworks, Component
Architecture |
|
Description: Same as Framework, but spanning
multiple Operating Systems (e.g. Macintosh, Windows, NeXT, Xwindows) |
|
Advantages: |
|
Code reuse |
|
Abstraction of non-product specific code |
|
Abstraction of common platform capabilities |
|
Increased modularity |
|
Drawbacks: |
|
Longer initial ramp-up development time |
|
Potential conflicting requirements |
|
Platform improvements require extra development |
|
Features sometimes become Least Common
Denominator |
|
|
|
|
|
|
Component Architecture Pattern |
|
Objective: Develop reusable architecture for
multiple products |
|
Related to: Frameworks, Evolutionary Delivery |
|
Description: Create a reusable and extensible
architecture for one or more products by bundling features in components
that plug-in to small backbone application |
|
Advantages: |
|
Code reuse |
|
Abstraction of common product functionality |
|
Increased modularity |
|
Increased flexibility in release schedules |
|
Drawbacks: |
|
Longer design phases |
|
Scheduling complexities |
|
|
|
|
Core Technology Pattern |
|
Feature Teams Pattern |
|
Microsoft Pattern |
|
|
|
|
|
|
Core Technology Pattern |
|
Objective: Provide central organization to
manage core components |
|
Related to: Component Architecture, Evolutionary
Delivery |
|
Description: Organize a team to manage and
deliver core components to multiple products |
|
Advantages: |
|
Central focus for process management |
|
Reducing duplication of effort |
|
Drawbacks: |
|
Politics |
|
Dependency management and scheduling
complexities |
|
Conflicting requirements and development
schedules |
|
|
|
|
|
|
Feature Teams Pattern |
|
Objective: Focus small groups on critical
feature areas |
|
Related to: Component Architecture, Evolutionary
Delivery |
|
Description: Organize a product team into
multiple smaller teams along major feature divisions. Each team manages
schedules, code, QA cycle, and feature completion. |
|
Advantages: |
|
High motivation |
|
Reduction of organizational burdens |
|
Drawbacks: |
|
Potential inconsistencies in process between
teams |
|
Code integration complexities in QA and
development |
|
Potential myopic focus of team members |
|
|
|
|
|
|
Microsoft Organizational Pattern |
|
Objective: Provide adequate support for all
aspects of Waterfall type development |
|
Related to: Waterfall, Monolithic Apps, Staff
Graphs |
|
Description: Organize a product team into
multiple smaller teams, along the following divisions: |
|
Development |
|
QA |
|
Program Management |
|
Product Management |
|
Business Units |
|
Advantages: |
|
Most aspects of software development have clear
ownership |
|
Thorough coverage of all areas |
|
Drawbacks: |
|
Requires adequate resources |
|
Technical knowledge and feature specifications
live in different groups |
|
|
|
|
|
|
Classic Waterfall Pattern |
|
Evolutionary Prototyping Pattern |
|
Evolutionary Development Pattern |
|
Parallel Team Pattern |
|
Component/Extensibility Development Pattern |
|
Goal-oriented Planning Pattern |
|
Staff Graph Pattern |
|
|
|
|
|
Classic Waterfall Pattern |
|
Marketing Requirements Document (MRD) |
|
Requirements Document |
|
Architectural Specification |
|
Project Schedule |
|
Milestone Chart |
|
UI Specifications |
|
Test Plans |
|
QA Schedule |
|
Debug Phase |
|
Release Candidate |
|
Release |
|
|
|
|
|
|
Evolutionary Prototyping Pattern |
|
Objective: Fast time-to-market on new product |
|
Related to: Component Architecture, Evolutionary
Delivery |
|
Description: Create quick initial prototype for
proof of concept. Iterate on prototype until release candidate. |
|
Advantages: |
|
Quick implementation |
|
Fast feedback on concept |
|
Ability to measure progress |
|
Drawbacks: |
|
Typically requires frequent rearchitectures |
|
Stability usually questionable |
|
Difficult to verify or validate requirements |
|
|
|
|
|
|
Evolutionary Development Pattern |
|
Objective: Flexibility on new product feature
requirements |
|
Related to: Component Architecture, Evolutionary
Prototyping, Feature Teams |
|
Description: Create initial baseline product.
Schedule multiple “mini-releases” using some other development cycle
(Waterfall). Mix and match mini-releases to create desired product. |
|
Advantages: |
|
Quick responses to market changes possible |
|
Release schedule is flexible |
|
Ability to measure progress |
|
Drawbacks: |
|
Heavy dependencies bog down cycle |
|
Difficult to verify or validate requirements |
|
|
|
|
|
|
Staff Graph Pattern |
|
Objective: Manage multiple projects with limited
resources |
|
Related to: Waterfall, Feature Teams |
|
Description: Drive multiple product schedules by
tracking resource usage across time. |
|
Advantages: |
|
Resource reallocation flexible |
|
Good for high-level planning |
|
Easy to identify inter-project timing
relationships |
|
Drawbacks: |
|
Granularity level too coarse for detailed
scheduling |
|
Outside dependencies not tracked |
|
|
|
|
|
|
Parallel Team Pattern |
|
Component Development Pattern |
|
Goal-oriented Planning Pattern |
|
|
|
|
|
|
Given Time Constraints |
|
Evolutionary Prototyping |
|
Evolutionary Development |
|
Example: |
|
RealJukebox |
|
Internet space |
|
Time-to-market key goal |
|
|
|
|
|
|
Given Resource Constraints |
|
Core Technology |
|
Staff Graph |
|
Example: |
|
Edmark product line |
|
Consumer space |
|
Shrink-wrap multiple deliveries |
|
Maintaining cost overhead key goal |
|
|
|
|
|
|
Given Feature Constraints |
|
Evolutionary Development |
|
Parallel Team |
|
Feature Teams |
|
Component Development |
|
Example: |
|
Adobe InDesign |
|
Shrink-wrap tools space |
|
Competitive product key goal |
|
|
|
|
Not rearchitecting in-place |
|
Vision lemmings |
|
Hierarchy for the sake of hierarchy |
|
The 1-Milestone Project Plan |
|
Mismatching constraints and SE pattern |
|
|
|
|
|
|
Not Rearchitecting In-place |
|
Objective: To create a difficult development
environment for future products |
|
Related to: Waterfall, Monolithic apps |
|
Description: Avoid any redesigns in your app,
and allow most code to stagnate as much as possible. Keep glomming on
features wherever you can until it takes years to update. |
|
Advantages: |
|
Don’t have to think too hard initially |
|
Most executives will like how much you’re
“reusing” existing stuff |
|
You get to meet lots of new people (i.e. lots of
turnover) |
|
Drawbacks: |
|
You have to think real hard on subsequent
iterations |
|
You’ll be forced to rearchitect the whole thing
or your product will ultimately die |
|
Nimble competition will eat your breakfast |
|
|
|
|
|
|
Vision Lemmings |
|
Objective: To create as many directions and
visions for the product as possible |
|
Related to: Evolutionary Prototyping,
Frameworks, Component Architectures |
|
Description: Key leaders continually redirect
goals and feature set of the product to react to latest trends or political
niceties. Employees follow directions blindly. |
|
Advantages: |
|
Every day is fairly exciting |
|
You get to meet lots of new people (i.e. lots of
meetings) |
|
You get really good at writing strategy
documents |
|
Drawbacks: |
|
Morale is not quite peachy |
|
Your project gets killed quickly in healthy
organizations |
|
Your project lingers forever in dysfunctional
organizations |
|
|
|
|
|
|
Hierarchy for the Sake of Hierarchy |
|
Objective: To create extra layers of hierarchy
within a growing organization |
|
Description: As flat organizations grow,
hierarchy is created to facilitate organization and communications. |
|
Advantages: |
|
Clear reporting structure |
|
Semblance of organization |
|
Most employees far removed from front-line
decision-making |
|
Drawbacks: |
|
Exponential increase in communication issues |
|
Higher up in the hierarchy you go, the more
divorced from the technology you are, the less you know |
|
|
|
|
|
|
|
|
The 1-Milestone Project Plan |
|
Objective: To over-simplify development process |
|
Description: Create one milestone. Call it “Ship
Product”. Cross your fingers. |
|
Advantages: |
|
No time spent planning |
|
No worry about dependency management |
|
Schedule tracking simplified |
|
High drama come release date |
|
Drawbacks: |
|
No risk management |
|
Highly unpredictable release date |
|
Not much to say at project reviews |
|
|
|
|
|
Mismatching constraints and SE pattern |
|
Multiple forms |
|
Parallel teams when resource constrained |
|
Doing a complete rewrite with political
constraints |
|
|
|
|
|
Know the constraints on your project ahead of
time |
|
Apply the proper pattern to your: |
|
Architecture |
|
Organization |
|
Development Cycle |
|
Learn from history |
|
Know your organizations anti-patterns and get
rid of them |
|
Identify your competitors anti-patterns and take
advantage of them |
|
|
|
|
|
|
|
|
|
|
|