Agile is not wor king in
BIG pr oject?
TaoWen & LiuFan
Once upon a time
there was a BIG project
“Agile”
• Small team
• Quick feedback
• Collective ownership
• Simple design
• Continuous refactoring

in

Reality

• Big team
• Client start from big plan
• Big scope
• Complex business logic
• Tight schedule
Do you feel the pain?
• Code organization in BIG project
Same code again and again
Big Mess
Layered Code Design
• View => Controller => Model => Service => ORM =>
Table => Stored Procedure
• “OOP Leads to Big Objects”: blindly put logic inside
models do not help us. Enforcing putting logic into
models, is enforcing layering.
• Layering is important, but not enough to control total
complexity
• Over-layering is pain in the butt
“

Big Ball of Mud,
Still the Most Popular Software Design

http://www.infoq.com/news/2010/09/big-ball-of-mud

”
Is there a better way?
Pipeline Architecture
% cat inFile | grep pattern | sort > outFile

Unix style
Eclipse
Plugin architecture
Besides Code,
What else is painful?
• Team in BIG project
Long process
Bottleneck
Layered Team Design
• Client => Michael => BA s + UI => DEV s + UI
=> QA s =>Deployers => Client=> Users
• Roles == Layers
Is there a better way?
• Separate team by features
– Feature Owner (Developer/Business analyzer)
– QA/Business analyzer
– DevOps
Conway’s Law

“

organizations which design systems ... Are
constrained to produce designs which are copies
of the communication structures of these
organizations

”
Big

problem

Vertical <=> Horizontal
Code
Team
That is so cool
Why not do it?
Vendor side
•
•
•
•
•
•

Capbility
Simple Design
Tight Schedule
Integration Cost
Reuse
Organization Structure
Customer side
• User perceive it as single system
• Customer want a total solution
• Vendor lack of business insight
• Customer lack of IT perspective
Should we just do
BIG up front design?
• Do features in parallel from beginning
• => Validate concept very late
• => Harder to change direction, re-prioritize
• Big project, but think first
=> Separate the important from unimportant
=> Do the most important part first
=> Earlier to validate the concept
=> Easier to change direction
• Eric Evan call it “Strategic Design”
Why we need to
plan strategically?
Q&A

Agile is not working in big project?

Editor's Notes

  • #4 Client start from BIG
  • #5 Start from brand-new, plan a lot
  • #6 Agile everything and everywhere in beginning Working code at day one OOD, TDD, Continuous Integration Pair Programming Standup, Retrospective, Showcase Iterative development/enhancement Small team, very good communication Beautiful and minimal architecture sprint every iteration
  • #7 Ramp up very quickly Reality: many people, long term
  • #8 Crash before deadline Think about huge refactoring or rewrite
  • #12 Want to control complexity by layers Every role want things under control
  • #13 Blindly apply oop People like Universal Model Focus on micro level
  • #18 Amazon way
  • #19 eBay way
  • #22 Long process, a lot waste on hand-over
  • #23 Layered communiction causing bottleneck
  • #24 “Change one button”: long lead time “Ask Michael”: single point failure, producer lacks the information they need, waste in the hand-over
  • #26 Way of handle big problem: * Multi-layer Single-point connection Switch pair, lost context Solution: Break big problem into small Reduce layer
  • #27 Conway&apos;s Law is an adage named after computer programmer Melvin Conway, who introduced the idea in 1968: If two teams build a compiler it will be two pass If three teams build a compiler it will be three pass If four teams build a compiler it will be four pass
  • #28 Modularized design is the key to control complexity in big project, not layered design Communication by module Development by module Divide and Conquer Horizontally Vertically
  • #31 I want a complete editorial &amp; publication system (word automation, work flow, CMS, distribution) Touched every piece a little, but none is complete Project cancelled because running out of budget
  • #34 Have time to gain knowledge about business
  • #35 Strategic Design Legacy system replacing Brand-new system developing Way to modularization: High level business design in advance
  • #36 Plan strategically Business Agile =&gt; Team Agile =&gt; Development Agile
  • #37 What is the root driver?
  • #38 Continuous deployment Deployment separately Shorten the time to market, reduce waste