Notes
Outline
Agenda
Tradeoffs in Shrink-Wrap Software
Patterns of Software Engineering
Anti-Patterns
Core Tradeoffs
Time Constraints
Resource Constraints
Feature Constraints
Other Tradeoffs
Architectural Constraints
Political Constraints
Patterns
Architectural Patterns
Organizational Patterns
Development Patterns
Architectural Patterns
Monolithic Application Pattern
Frameworks Pattern
Cross-Platform Framework Pattern
Component Architecture Pattern
Architectural Pattern I
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
Architectural Pattern II
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
Architectural Pattern III
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
Architectural Pattern IV
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
Organizational Patterns
Core Technology Pattern
Feature Teams Pattern
Microsoft Pattern
Organizational Pattern I
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
Organizational Pattern II
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
Organizational Pattern III
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
Development Patterns
Classic Waterfall Pattern
Evolutionary Prototyping Pattern
Evolutionary Development Pattern
Parallel Team Pattern
Component/Extensibility Development Pattern
Goal-oriented Planning Pattern
Staff Graph Pattern
Development Pattern I
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
Development Pattern II
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
Development Pattern III
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
Development Pattern IV
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
Other Development Patterns
Parallel Team Pattern
Component Development Pattern
Goal-oriented Planning Pattern
Applying Patterns I
Given Time Constraints
Evolutionary Prototyping
Evolutionary Development
Example:
RealJukebox
Internet space
Time-to-market key goal
Applying Patterns II
Given Resource Constraints
Core Technology
Staff Graph
Example:
Edmark product line
Consumer space
Shrink-wrap multiple deliveries
Maintaining cost overhead key goal
Applying Patterns III
Given Feature Constraints
Evolutionary Development
Parallel Team
Feature Teams
Component Development
Example:
Adobe InDesign
Shrink-wrap tools space
Competitive product key goal
Anti-Patterns
Not rearchitecting in-place
Vision lemmings
Hierarchy for the sake of hierarchy
The 1-Milestone Project Plan
Mismatching constraints and SE pattern
Anti-Pattern I
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
Anti-Pattern II
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
Anti-Pattern III
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
Anti-Pattern IV
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
Anti-Pattern V
Mismatching constraints and SE pattern
Multiple forms
Parallel teams when resource constrained
Doing a complete rewrite with political constraints
Conclusions
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