Software Development Lifecycle (SDLC) models
Take aways from other methods
The Agile manifest
Values
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
Or: “Agile = characterized by the division of tasks into short phases of work and frequent re-assessment and adaptation of plans.”
Most of the following models are Agile…
Dynamic system development method (DSDM)
Timeboxing
MoSCoW prioritization:
must-have
should-have
could-have
and won’t-have, or will not have right now.
Some companies also use the “W” in MoSCoW to mean “wish.”
Iterative and incremental approach
Feature-driven development (FDD)
Feature teams
Parallel development
Tracking completion status (reporting, milestones, percentage completion)
Crystal methods
People-centric
Frequent delivery
No “one size fits all”
Modern principles: automated tests, frequent integration
Scrum (For very large projects)
Business value-driven comprehensive framework
Scrum roles
Owner
development team:
testers
documenters
DB admins
scrum master: agile coach, servant leader, removes barriers, coaches and convinces; does not manage
scrum workflow
sprint planning->sprint->review->retrospective
Potentially shippable product increment each sprint
Suitable for very large projects
Lean
Minimize waste, visualize production, look for bottlenecks, inefficiencies
Last responsible moment: wait ‘til we have enough facts
not make decisions based on preset timelines.
Deliver as fast as possible: small iterations are easier to manage
Kanban
Visualize your work, limit work in progress
Extreme Programming
Just In Time design
Branching and merging is not listed as a core XP practice
is generally not a favorable practice in Agile approaches.
Branching has the potential for creating technical debt if changes are not merged frequently.
The risks an be somewhat mitigated by merging frequently.
In any case, branching and merging .
Pair programming
Collaborate, continuous code inspection
real-time development technique to increase algorithm implementation
Test-driven development
Write test
Write function to fail test
Write code to pass test
Spotify
Culture
Innovation: hackathons
Learning from each other
Failure-friendly culture
(internal) code repositories, visible and open for other teams
Minimize handoffs (help from other teams)
Bureaucracy minimized
DevOps (Development Operations)
Developers and testers
Ops (operations): people working with release, servers, middleware, network, storage configs, monitoring techniques
DevOps aims to extend fast and frequent software feature development approach to build an efficient delivery pipeline.
Phases: development –> test –> stage –> production
development: unit testing (code)
test: integration testing (User-interface, web server, app server, back-end)
stage: user acceptance
production
Continuous…
Integration: Central repository
development + test
Development: Ensuring stable product after every release
development + test + stage
Deployment: automating updates to production
development + test + stage + production
And more…