#vJUG

Design is a Process, not a
Document
Trisha Gee, Java Driver Developer
@trisha_gee
Design: translate the
requirements in a
specification that describes
the global architecture and
the functionality of the
system.
http://homepages.cwi.nl/~paulk/patents/isnot/node4.html
Managing the Development of Large
Software Systems - Dr Winston Royce
http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf
<This Page Left Intentionally Blank>

Agile Design
Design is a Process, not
a Document
The Problem
Constraints:
Backwards
Compatibility
> What do you want
to do?
>_
Design is a Process, not
a Document
Bugs and
Defects
Unknown
Architecture
On Time and
Under Budget

New Features
Inconsistencies

Lack of
Experience

Unclear
Objectives
Bugs and
Defects
Unknown
Architecture
On Time and
Under Budget

New Features
Inconsistencies

You Are Here
Lack of
Experience

Unclear
Objectives
Bugs and
Defects
Unknown
Architecture
On Time and
Under Budget

New Features
Inconsistencies

You Are Here
Lack of
Experience

Unclear
Objectives
Bugs and
Defects

...and here

New Features

Unknown
Architecture

...and here

On Time and
Under Budget

...and here
Inconsistencies

You Are Here
...and here

Unclear
Objectives

Lack of
Experience

...and here
Bugs and
Defects

...and here

New Features

Unknown
Architecture

...and here

On Time and
Under Budget

...and here
Inconsistencies

You Are Here
...and here

Unclear
Objectives

Lack of
Experience

...and here
Bugs and
Defects

...and here

New Features

Unknown
Architecture

...and here

On Time and
Under Budget

...and here
Inconsistencies

You Are Here
...and here

Unclear
Objectives

Lack of
Experience

...and here
Bugs and
Defects

...and here

New Features

Unknown
Architecture

...and here

On Time and
Under Budget

...and here
Inconsistencies

You Are Here
...and here

Unclear
Objectives

Lack of
Experience

...and here
Bugs and
Defects

...and here

New Features

Unknown
Architecture

...and here

On Time and
Under Budget

...and here
Inconsistencies

You Are Here
...and here

Unclear
Objectives

Lack of
Experience

...and here
Bugs and
Defects

...and here

New Features

Unknown
Architecture

...and here

On Time and
Under Budget

...and here
Inconsistencies

You Are Here
...and here

Unclear
Objectives

Lack of
Experience

...and here
Where do I start?
> You are in a cluttered code base.
Everywhere you turn you see
different people’s styles.
> There are bugs to be fixed, and
new features that must be
implemented.
> Some users suggest improvements to
your product, others will kill you
if you change a thing.
> What do you want to do?
> _
Maintainability

Spe

ed

Tes
tabi
lity
onsistency
C

si
on
C

cy
ten
s

ability
Read

Im

mu
t

ab
il

ity
Design Goals
• Consistency
• Cleaner design
• Intuitive API
• Understandable Exceptions
• Test friendly
• Backwards compatible
In The North Tower...
Lack of consistency
> What do you want
to do?
>_
Why bother?
Our Solution
• Static analysis
• Build tools
• Discipline
Win!
Meanwhile, in the East...
Other adventurers!
> What do you want
to do?
>_
Our Solution
• Get them onboard
• Use the Scala driver as the guinea pig
• Give Morphia some love
• Talk to Spring
• Tests are your friends
Lurking All Around...
Backward Compatibility
> What do you want
to do?
>_
Our Solution
• An architecture
• Supports both APIs
• ...bonus of supporting other APIs too
• Tests tell us if we’ve done it right
On the Southern Front
The Public API
> What do you want
to do?
>_
Our Solution
Our Solution
• Committees
• Documents / Spreadsheets
• Meetings
• Research
Our Solution
• Committees
• Documents / Spreadsheets
• Meetings
• Research
• Hack Days
• Conferences
• Early Access
Retrospective
I wish...
• I had asked more questions.
• Particularly “why”
• I better understood my priorities
• We could use the whiteboard more
• I had focussed on tests even more
Conclusion
Tools
Your Inventory
• Your Technical Skills
• Your Domain Knowledge
• Your Life Experience
• Your Questions
Environmental Inventory
• The Domain
• The People
• The Hardware
• Chosen Technology
• Existing Code / Application / Platform
Your Inventory Grows
• Skills you learn
• Tools you research
• Team changes
Some Examples
• Tests. Always a Good Thing
• Static Analysis
• An automated build
• Bug/feature tracker
• Visibility of WIP
Design is a Process, not
a Document
#vJUG
@trisha_gee

Questions
http://is.gd/java3mongodb

Design is a process, not a Document