I’ve been working for the past year on building the Scrum Team Assessment (yes, you can still go get it for your team ). I’ve been doing all the work on it personally and it has been great fun. The best part of it has been that I’m back into coding. And, with that, of course I have had to take my own advice about Test-Driven Development and the other Agile Engineering Practices. But it hasn’t been easy!
I’m using PHP for the web front end, and Python with OpenERP for the back end. My testing tools include Selenium for Acceptance Testing and PHPUnit for unit testing. And… nothing yet for the Python back-end. This is still a sore point with me. Normally, I would find the back end TDD process easier… but OpenERP has been a HORRIBLE BEAST to use as a development platform. Well, I might exaggerate a bit on that, because it is really just the complete lack of well-written API documentation and sample code. Which is funny, because there are tons of open-source extensions for OpenERP written. Anyway, I don’t want to complain about it too much, because in many other ways it is a fantastic platform and I wouldn’t easily switch it for anything else at this point.
Back to testing. Last week, a client using the Scrum Team Assessment found a bug… and it was one of those ones that I know made them consider not using the tool anymore. Fortunately, our contact there has the patience of a Redwood, and is helping us through the process of fixing the system. How did the bug happen?
Because I didn’t do _enough_ TDD. I skimped. I took shortcuts. I didn’t use it for every single line of code written.
The question for me now, is “why”? Fortunately, the answer is simple to find… but solving it is not as easy as I would like. I didn’t follow my own advice because I was learning about too many things at the same time. Here’s what I was learning all at once over a three week period in December when I was doing the real heads-down development work:
- PHP and PHPUnit
- OpenERP (APIs for persistence and business logic)
- RML (a report generation language)
- Amazon EC2, RDS and Route 53
- Some Ubuntu sys admin stuff
- VMWare Fusion and using VMs to create a dev environment
- Postgresql database migration
- Oh, and refreshing on Selenium
Like I said, FUN! But, a bit overwhelming for someone who hasn’t done any significant development work since 2006-ish. As well, because of learning about so many things, I also didn’t have a good setup for my development, testing and production environments. Now I have to clean up. Finally, I also forgot about another important Agile Engineering practice that is used when you have lots of intense learning: the Architectural Spike.
I have to make sure that I take all that I’ve learned and create a truly good dev and test environment (because that was a huge hinderance to my work with both Selenium and PHPUnit). And I have to take the time to learn to do the testing in Python (I would love suggestions on a good unit test framework)… and go back over that code, even though most of it is simply declarative of data structures, and make sure it is well-covered by unit tests. Ideally, I might even consider throwing some code away and starting from scratch. One possibility I’ve considered is to get rid of PHP entirely and build the whole system with Python (I’d love some thoughts on that too!)
Why am I doing all this? Well, I really think that the Scrum Team Assessment is an awesome tool for teams that maybe can’t afford a full-time coach. It certainly isn’t a complete replacement, but I’ve poured my knowledge and experience into it in the hopes that it can help a bunch of people out there do Scrum better… and more importantly, create great teams that produce awesome business results and where people love to come to work every day.