Last week I taught the first iteration of the Agile Engineering Practices course, as part of Oxford University’s Software Engineering MSc. For a while this MSc programme has included a module on Agile Methods taught by Angela Martin which has proved very popular with the students. That course compares the various different named agile methods, and focusses mostly on issues of process and human communication.
My new course aims to compliment this with an in-depth look at the engineering practices that support the application of such a method to software development, and allow a product to be developed iteratively and incrementally, continuously delivering valuable features. The students on the course are studying part-time, taking time out from jobs in industry, so they brought their own experiences from their working lives. This led to interesting discussion and debate on a number of topics.
I wanted the course to be very practical, so we spent more than half of the week in the computer lab working on hands-on exercises. With a relatively small class and the intensive format of the course (each module is taught as a solid week of classes) we were able to have one exercise follow on from another, and try to pull all of the tools and techniques together. We started with some work on version control strategies, and then followed this up with creating an automated build and setting up a continuous integration server. Over the next couple of days we looked at refactoring techniques, introducing seams to legacy code to try and get it under test, and various testing techniques at the unit and system level. To conclude the arc we spent some time looking at release and deployment techniques. I encouraged the students to pair program, learn from each other and help each other out.
We covered a lot of different technical topics, and I found it hard to recommend one book for the students to use as their course textbook. We looked at subjects detailed in Joshua Kerievsky’s Refactoring to Patterns, Freeman and Pryce’s GOOS, Michael Feathers’ Legacy Code book and Gojko Adzic’s Specification by Example. In the end I gave the class references to all of these books, but recommended Jez Humble and Dave Farley’s Continuous Delivery as the book that motivated all the themes and gave the big picture of what we were trying to do - minimise the cycle time from idea to delivery, and allow that cycle to be repeated frequently and reliably.
We had a good week, and (I think) the students enjoyed the class. There is definitely room for improvement though. Our end of course retrospective produced some ideas for things to add and change. The next iteration of this course in Oxford is in January, so we’ve got some time to tune the materials. I’m looking forward to it. I should also thank my teaching assistant Jim Whitehead, who was a great help throughout the week.