Using wishlisting.org to teach agile…
First let me give you some background. Wishlisting.org is a service being built by agilityFeat as an example of agile software development techniques. We partnered with Beyond Requirements and Lithespeed at the Agile 2012 conference and the Agile Development Practices West conference this year to run hands on workshops for conference attendees. At each conference we had a table setup where I was writing code on a projector, and anyone who wanted to stop by and write code with us was welcome to contribute to the project. Kent McDonald from Beyond Requirements was also on hand so that anyone who wanted to stop in and help could assist him with writing user stories and acceptance criteria, or testing the application.
In this way, we were allowing people to see agile project management and engineering techniques in action on a small project. In between the conferences, I have been continuing to write code for wishlisting.org, primarily in support of our beta client, the Albemarle Housing Improvement Program.
Wishlisting.org helps charities fund specific projects
So what is wishlisting.org? In short, it is a website that allows charities to list multiple projects that they need funding for on a “wishlist.” Their supporters can donate money to those projects, and see how far they are towards the goal. In it’s current form, it’s very simple, and you can think of it as a kickstarter or microfunding platform for charities.
Watch this short video and I’ll give you a demo of the current features:
Now let’s demo a little code!
If you’re interested to see a little bit under the covers, then you’ll want to keep reading. We are building the site in Ruby on Rails and hosting it on Heroku. As I mentioned above, we are applying agile engineering techniques to the project, which includes Acceptance Test Driven Development, or ATDD.
ATDD basically means that Kent will write a user story of what functionality he wants to see, and then list some acceptance criteria for it in this format:
Given (some precondition)
When (the user takes some action)
Then (this result is displayed)
Then I take Kent’s acceptance criteria and automate them using a tool called Cucumber. I can write those tests even before I write the code, and that way when I get the tests to pass, I know that I have completed that user story. To see more about how this works, watch the next video:
Finally, those automated tests are great, but only when I remember to run them. Agile projects also incorporate Continuous Integration, or CI. CI Servers will notice whenever a developer checks in code, the CI server will get a copy of that code and execute it in a test environment. The CI server will run any Cucumber tests that the developers have written and make sure they pass in the test environment. If they don’t pass, the team is notified so they can fix the code right away. This ensures that the team in continuously integrating their code with each other without breaking existing functionality.
wishlisting.org is a work in progress
So where does wishlisting.org go from here? This is a side project, so I basically work on it as I can between conferences. My most immediate deadline is that AHIP wants to start using it, which is why the features developed so far have focused on building a usable front end for them to start taking donations. After we do some more work on the payment aspects, I hope to start cleaning up the home page for wishlisting.org and putting in the features necessary to start opening up the service to other charities beyond AHIP.
Stay tuned for more examples of agile development and the wishlisting.org project!
Want to learn more?
Do you want to learn more about the techniques shown in this blog post? Then you should attend DareToBeLean! It’s a 3 day workshop that the agilityFeat team is putting together on the beach in Costa Rica. We’ll be doing hands on exercises about many of the topics in this blog post, so come join us!