I’m relatively new to agile development, so I’d be interested to hear other people’s comments on this topic, but I’ve been doing a bit of reading and experimentation with the Pomodoro technique and it seems to me that there are a few parallels between the technique and agile processes.
The Pomodoro technique is a time management technique with varying stages of complexity. You can get started with the Pomodoro technique simply by setting a timer for 25 minutes, working consistently on a single task through that 25 minute period then taking a 5 minute break. Every 4 Pomodoros you should take a longer (15-30 minute) break.
In the first stage of the Pomodoro technique you simply log the tasks you worked on and how many Pomodoros it took you to complete each one. As you progress to more advanced stages of the technique, you will begin to estimate the number of Pomodoros you expect to spend on each task, with a view to improving these estimates over time. I noticed a similarity here with the concept of user story estimation in agile, where you will usually start with a rough finger-in-the-air estimate of the relative size of the user stories that make up your project, but gradually these estimates can be reviewed and made more accurate with each iteration of the project.
A general rule within the Pomodoro technique is that if a task takes more than 5-7 Pomodoros, it should be broken down into smaller tasks that still add value. On the flipside, if a task takes less than one Pomodoro then it should be grouped together with other similar tasks because a Pomodoro is indivisible. There are obvious parallels here with the concept of writing user stories that are both of a manageable size to be able to deliver in a single iteration and that deliver some kind of business value.
One interesting aspect of the Pomodoro technique is that it can apparently be applied well in pairs as well as teams of people to improve productivity. Now, we agile practitioners like to work in pairs and my reasoning as to why that works well is because the pair will naturally motivate each other (it’s much harder to procrastinate when someone is looking over your shoulder) and problems are solved quicker because they can be discussed immediately. Adding the concept of a timer into the mix could lead to the pair becoming more synchronised in their work, because there is a constant visible reminder as to how much time they have left until the next break. However, if not all the team members buy into the concept then I wonder if this would really work. I have yet to try out the technique with a pair, so it would be interesting to know just how effective this really is.
If I have managed to raise anyone’s interest in the Pomodoro technique and you are looking for more information, check out the official website at http://www.pomodorotechnique.com/ and download the 45 page user manual.
I’ve just returned to England after my first ThoughtWorks assignment – a 6 week training program at ThoughtWorks University in Bangalore.
ThoughtWorks University is a hothouse for new graduate recruits. You take a bunch of bright young budding software consultants, plant them in India for 6 weeks and give them just enough scaffolding, food and water to allow them to blossom into fully-fledged ThoughtWorkers able to go out into the wide world of a real consulting project.
The training program actually started 4 weeks before we even left the country, with a pre-course development task, which, under the guidance of a personal coach, allowed us coachees to determine our own strengths and weaknesses and focus our training on the areas that we felt we needed to improve. Upon arriving in Bangalore we were thrown straight into 2 weeks of training workshops and then split into project teams where we got a chance to work on a real development project for the remaining 4 weeks.
Having the opportunity to work on a real project was one of the highlights of the training program and was the biggest contributor to my understanding about what it’s like to work in an agile team. The TWU projects provided a safe environment within which we could make mistakes and learn from them and we were positively encouraged to make as many mistakes as possible. I gained a lot of valuable insight into my own personal development through working as part of a team and by the process of gathering continuous feedback from my fellow team members.
I found the entire experience both intense and invigorating. There’s a lot to take in over a relatively short time period (6 weeks is not as long as it sounds) but the coaching team did a really effective job at presenting the material in an engaging way and I got to meet a whole load of smart, creative, inspiring people from all over the world, with myriad backgrounds, who really contributed to the lasting memories I will take away from TWU.
There’s nothing like the anticipation of waking up on the morning of your first day in a new job with all the excitement of knowing that this could be the beginning of a whole new chapter in your life. There’s something about embarking into the unknown world of a new job that somehow makes you overflow with enthusiasm and motivation. Somehow you just know that this is the perfect job for you and you can’t wait to get stuck in. Of course, as with any job, after a while company politics and personality clashes start to take the sheen off things, but for now I’m simply enjoying that ‘shiny new job’ feeling.
I probably should have mentioned in my last post, but the SaaS course that I wrote about last week is provided through a service called Coursera, which also offers a whole range of other courses in many different subjects, provided by such fine institutions as Princeton, Stanford, University of Michigan and University of Pennsylvania, all for free!
It’s not just for computer geeks either, as there are courses offered from the faculties of business, biology and humanities, to name a few. With so many courses available for free, there’s no excuse not to sign up for something that interests you. Check it out!
Around 6 months after the completion of my last Open University course I started to miss the study and began looking around for some other interesting courses to take. University fees are increasing here in England, so OU study is starting to become a bit of an expensive hobby, but I do really like the structure and motivational push that a taught course provides. Although I also like learning from books, I never seem to be able to stick with a self-imposed study regime when there isn’t the looming assignment deadline to keep you pushing on.
Around about this time a friend of mine pointed me in the direction of some online courses that were being offered by UC Berkeley. The courses were composed of material taken from some of Berkeley’s undergraduate programmes and given the reputation of the institution I was amazed to find that these courses were being offered free of charge, so I immediately signed up to an interesting looking course called Software Engineering for SaaS and waited impatiently for the email letting me know that the course was ready to start.
From the name of the course and the brief description that was offered on the course website, I was expecting a fairly theoretical course focusing on software as a service (SaaS), the differences between SaaS and packaged software and the reasons why a development team might choose a SaaS implementation over a traditional software implementation. I was pleasantly surprised to find that the course was more of a programming course focusing on agile development methods like behaviour driven design (BDD) and test driven development (TDD), using the vehicle of Ruby on Rails to create a small online application.
The course spanned a period of 5 weeks and was delivered via recorded screencasts of the live lectures and a book, which at the time of doing the course was still in an alpha version and could be purchased in electronic (Kindle) format for around £8. Weekly assignments ensured that students were keeping abreast of course content and provided valuable feedback on programming assignments, which was provided via an automatic marking system. Quite a clever way to manage a course with 6,000 students!
I really enjoyed learning Ruby, which turns out to be a very versatile little language and whetted my appetite to get back into proper development and start trying out some new languages and processes. Agile development was also completely new to me and the course gave me an excellent springboard for further research into agile methods and test driven development. Overall I thought this was a rewarding and informative course, which opened my eyes to some of the more modern techniques and processes that are being practised by developers today.
OK, so maybe blogging is not my forte, or maybe I just haven’t had anything interesting to write about recently. Either way, I looked back at this lonely, neglected blog and thought it was about time I filled it with something.
Alright, so a lot has changed in 4 years, so to get you all back up to speed, here are the edited highlights:
Almost exactly 4 years ago today I successfully interviewed for a junior developer position with a small company in Milton Keynes called Urgent Technology. I was blown away by the fact that a real software company were willing to offer me a position with no experience and no qualifications (I was still only half way through my OU degree at the time and was by no means a real developer). So they took me in, showed me the ropes and before long I was officially part of the development team.
So while working for Urgent as a developer during the day, by night I continued my OU studies and in December 2010 I completed a BSc in Computing and Mathematical Sciences, proving that I could indeed hold down a ‘proper’ job whilst learning new tricks in my spare time.
So 4 years on and the itchy feet have started to kick in again. Working at Urgent Technology has given me some great experience in working with real customers on real development projects and learning to deal with all the complications that can throw up, like coping with conflicting requirements from customers and keeping projects running on time and within budget. I learned that there can be a trade-off between packing lots of features into a system and making it easy to use and striking the right balance can sometimes mean having to persuade the customer that the way they want to do something may not be right for the system or its users and then finding alternative ways to achieve what they need to do without compromising too much on standards and usability.
So, to bring us right up to date, I recently handed in my notice at Urgent Technology to explore an exciting new opportunity, but I’m not going to give everything away in a single blog post, so more about that later!
The course officially started on the 2nd of February, so I’m off to a bit of a slow start here… it’s the beginning of week 3 and I’m only just past half-way through Unit 1. I’m not that worried though, I just need to get back into the swing of this studying malarkey. After a three month break (my first since I started with the OU in 2004) I’m just a bit reluctant to give up all this extra free time I’ve discovered.
Anyway, back to the course… even though I’ve been slow to get back into it, I’ve found this unit really interesting. I’m fascinated by the whole distributed computing idea and the history of the Internet and networking technologies. To think that the Internet as we know it was only created in the 1970s and now I don’t think I could live without it. What did people use as their source of information 20 years ago? How did people manage to get any work done without email? Everything must have taken 10 times longer to do and if you didn’t know the answer to something, chances were you were never going to find out.
The idea of using a distributed to system to run software that is hosted on a remote machine seems a little odd to me. I won’t say too much about this as it is the topic of one of the assignment questions, but surely this is less efficient than running a copy of the software on a local machine? I shall have to do some further research into this area in order to answer the assignment question, but it may well prove to be an interesting area.
This is me attempting to make some sense of the jumble of learning and ideas I have in my head and hopefully will be adding to as time goes by. In a sense it’s just for me, so that things I learn now don’t get lost in the mists of time but I also hope that it will help to inspire others and encourage interesting discussion. So I’d better tell you what this is all about, right?
The last 4 years have seen me tackle several courses in various topics around Computing, Technology and Mathematics some with a view to gaining a degree in Computing and others just for fun. I’ve finally settled upon working towards the BSc (Hons) Computing and Mathematical Sciences and plan to complete in September 2009. Along the way I also hope to complete the Certificate in Web Applications Development, which I only need one more course to complete but no current plans to study it.
I have designed one site from scratch so far, for the Open Dance Group. I am quite pleased with this first attempt as I made extensive use of CSS to get the layout just right. I find CSS a bit of a pain to get the hang of as different browsers (IE, grrr) seem to interpret the rules slightly differently. Hence the site doesn’t quite render as I’d intended it on Internet Explorer, but at least it looks acceptable.