2. I don’t care about how you deal
with it, I just need the features
work fine.
-- Almost Clients --
3. (do) Action
(to get) Result
(of) Object
---------------
Feature
So, what is the feature ?
4. - Calculate the total of cart.
- Display the sliders of promotion.
- Get logged in Dashboard.
- Compare 2 products in wishlist.
- Detect fraud-transactions of users.
So, what is the feature ?
5. So, what is the feature ?
Features
TheGioiDiDong.com Homepage
6. What is Feature-Driven Development ?
Final Release
Start Point
Feature 1
Feature 2
Feature 3
Feature 4
Feature ...
Feature ...
Feature ...
Feature n-1
Feature n
YOUR
TEAM
7. What is Feature-Driven Development ?
❏ Invented by Jeff De Luca in 1997
❏ An (lightweight || Agile) methods
❏ An (iterative && incremental)
software development process
❏ All driven from a client-valued
functionality perspective
9. ----- It takes about 5 steps -----
How to deal with the whole features ?
Step
1
Step
2
Step
3
Step
4
Step
5
10. Already aware scope, context and
requirements of system :
▪ Domain discovery
▪ Modeling work
▪ Modeling review
▪ Document study
Note : more Shape than Content
Step 1 - Develop an Overall Model
Develop
an
Overall Model
Step
2
Step
3
Step
4
Step
5
11. Domain > Subject Areas > Business
Activities > Categorized Feature List > Feature :
▪ (do) Action (to get) Result (of) Object
▪ if (feature->estimated_time > 2 * WEEK) {
feature->break_down_to_small_pieces();
}
Step 2 - Build feature list
Develop
an
Overall Model
Step
3
Step
4
Step
5
Build
Feature
List
12. Produce the development plan
▪ if (feature->estimated_time > 2 * WEEK) {
feature->break_down_to_small_pieces();
} else {
foreach (class in feature->classes) {
class->assign_for(programmer);
}
}
Step 3 - Plan by feature
Develop
an
Overall Model
Step
4
Step
5
Build
Feature
List
Plan
by
Feature
13. Produce a design package for each
feature
1. Select small group of features
2. Make detailed sequence diagrams
3. Refine overall model
4. Write class & method prologues
5. Hold design inspection
Step 4 - Design by feature
Develop
an
Overall Model
Step
5
Build
Feature
List
Plan
by
Feature
Design
by
Feature
14. Produce real-feature
if (feature->inspect_design() == SUCCESS) {
foreach (class in feature->classes) {
class->owner->develop_code().then(function() {
if (class->unit_test()&& class->inspec_code())
continue;
});
}
feature->promote_to_main_build();
}
Step 5 - Build by feature
Develop
an
Overall Model
Build
Feature
List
Plan
by
Feature
Design
by
Feature
Build
by
Feature
16. To keep tracking and report
accurately state, FDD defines
6 milestones
Milestones
Design by Feature Build by Feature
Domain
Walkthrough
Design Design
Inspection
Code
Code
Inspection
Promote to
Build
1% 40% 3% 45% 10% 1%
17. Roles and Responsibility
Key Roles:
1. Project
Manager
2. Chief
Architect
3. Development
Manager
4. Chief
Programmer
5. Class Owner
6. Domain Expert
Supporting Roles:
1. Release
Manager
2. Language Guru
3. Build Engineer
4. Toolsmith
5. System
Administrator
Additional Roles:
1. Tester
2. Deployer
3. Technical
Writer
One team member can play many roles
and one role can be shared to many members.
18. Best Practices
Mechanism of FDD is almost likely
mechanism of GIT branch. So FDD is
the best way to combine with
decentralized version control like
GIT.
20. Pros :
★ Good to large projects
★ Progress
tracking/reporting
★ Frequent tangible
results
★ Flexible, strong with
GIT
★ Class, feature ownership
★ Concise processes
★ Emphasizes quality
★ Just enough design
initially
Pros & Cons of FDD
Cons :
➢ Not suitable with small
projects
➢ High reliance to chief
programmers
➢ Less written
documentations
23. CREDITS
Special thanks to all the people who made and released
these awesome resources for free:
▪ Presentation template by SlidesCarnival
▪ Photographs by Unsplash
References :
1. Feature Driven Development on Wikipedia
2. Feature Driven Development by Christophe Marchal
3. A successful Git Branching model on Nvie.com
4. Lecture 5 presentation by Ahmed Alageed
5. Feature Driven Development by John Bonjean