Neal Ford on Agile Engineering Practices
I recently reviewed Neal Ford on Agile Engineering Practices by O’Reilly Media this title is available both as part Safari Books Online, here or as stand alone.
“Agile Engineering Practices” runs as a workshop, 7 hours long, and goes over all aspects of engineering practices. The list of topics goes as follows:
- Key Principles
- Estimation
- Test-driven Design Part 1
- Test-driven Design Part 2
- Pair Programming
- Automation
- Version Control Strategies
- Testing the Entire Stack
- Functional Tests
- Agile Design
- Emergent Design Enablers
Key Principles: provides a bit of history on software engineering & some great food for thought. It reminded me of Glenn Vanderburg’s talks on engineering given at railsconf 2011 & 2010.
TDD part1 & 2: If you’re do TDD normally, please do skip the TDD portion. I can reassume it with use a more flexible/powerful language to test a less flexible one. (use groovy to test java, etc).
If you work at a shop that doesn’t do TDD please do watch it, and use the data & statistics that it gives you as ammo to convince your boss or coworkers. It’s also interesting to see how he approaches TDD, which is more bottom up than what I am used to do.
Pair Programming: Same goes for Pair Programming. Although I have paired in the past, I have never done it exclusively. Neal provided some info on why certain times it worked while other times it failed miserably. I found a lot of actionable ideas during this section.
Automation: Great segment, gave me good ideas on how I could integrate effective information radiators. Also I had similar experience with failed efforts which provided me with some comfort that I am not (with my team) struggling alone.
Testing the entire stack: goes over strategies to test the entire stack. The different level of testing: unit, functional, integration, user acceptance. Mocking & stubbing strategies.
Functional Tests: is continuing the overview from the previous segment. While watching these 2 segments get ready to write down names of really cool tools that you can use especially if you’re in java world. Some type of testing that you normally don’t thing about like system testing, quality of service testing, non functional testing.
Agile design: This was one of my favorite segments. I liked the distinction between accidental complexity & essential complexity. Check out sonar, a technical debt calculator.
Emergent Design Enablers: Neal demonstrates how refactoring, not just by tools, can simplify & show off the emergent design of the software. He talks about how certain metrics will show idiomatic patterns, he uses as an example how looking at cyclomatic complexity & afferent coupling uncovered a pretty bad idiomatic pattern within struts 2. He then goes over how capturing such idiomatic patterns in both java & ruby. (He shows a pretty neat technique in ruby that I hadn’t thought about through method added hook)
Conclusion: I highly recommend this title. Find the time to dedicate to it and watch it, take notes & stop whenever you get struck with an idea. It’ll be too hard later to remember what the idea was. It’s 7 hours after all.

