1. Notes on...
agile development
October 2012
Matt Griffin @mattpgriffin
2. Above all...
Make it as quick as reasonably possible to go from code to
production. If it takes weeks, you're in trouble.
Focus developers on end-user value as the overarching
metric for their success. Deliver quality.
Tests. Tests. Tests...
Engineers must write tests. Significantly reduces QA and
number of issues caught late or at integration.
Have fixtures and good tests so people can change code
and know quickly if they broke something.
3. Do code reviews
The approve/reject/feedback gate for merging branches.
Require two reviews (from anyone) until the team is all
generally similarly competent. Then require one.
Reviews should be small. Look at code, APIs, tests, and
UX. Try limiting branches to a max of 500 lines.
● land code regularly instead of once a week or more
● forces people to think more about how to split up the
work, shipping value more frequently
● will train other engineers across projects as they review
4. Open communication
Look mom, no email!
Be effective and open with simple, low cost, real-time tools.
● bug tracker - everyone should be encouraged to submit bugs. be
transparent and honest with status/progress.
● DVCS - transparent, decentralized development
● wiki - empower everyone to document common tasks
● group chat (irc, HipChat) - open company and team/project rooms
with browsable logs since the beginning of time
● pastebin/etherpad - quickly share snippets w/ URLs
● Google Hangouts and Apps tools - add secure voice/video chat,
screen sharing, document collaboration for a low investment
5. Continuous integration
For web software, have an automated Jenkins instance run
through a series of Selenium tests on a regular basis.
If something fails, send alerts and make sure someone
stops what they're doing and fixes it.
All of the above are to make it easier and faster for people
to change things and have a good safety net.
6. Environments
Staging environment
● use its own copy of the production DB
● update the code automatically very frequently (Ubuntu
One is at every 15 minutes atm).
An edge environment with the latest code against the
actual production DB is also very useful.
7. Frameworks
not really agile-related but here's some advice...
Choose wisely
● fit your current & future needs
● rash decisions or too many frameworks leads to higher
costs in training, upgrades/maintenance, and ALL
dependent code
● participate in the community and contribute
enhancements upstream
8. Daily
Do daily stand-ups. All the developers have a quick (~15
minutes) meeting letting everyone else know what they did
and what they are going to do... and anything interesting in
their life :)
9. Periodically
Continuously look at the whole development process, from
starting up a new branch to a user using it and identify
anything that isn't directly adding value (this is what is
called "waste").
Aggressively and boldly cut down on waste. Initially, you
will most likely have to take more drastic changes.
Someone needs to be there pushing!
10. Releases
Have a regular cadence, something short like 1 or 2 weeks.
Target each piece of work to these releases.