In July, I was offered the opportunity to review Wrox Publishing’s newly released “Professional Silverlight 3”, a massive full-color book covering nearly ever aspect of Silverlight 3. I’ve long been a Wrox fan and as a WPF developer with a web background I have a keen interest in all things Silverlight, so naturally I jumped at the chance to review this new book. Unfortunately, life did what it always does and prevented me from completing the review until now.
NOTE: I finalized this article while attending PDC09, where Scott Guthrie announced Silverlight 4. This release interval for Silverlight has been unprecedented: only three months after the official Silverlight 3 launch! I am confident though that you will still find this book timely and valuable.
As expected, Wrox does not disappoint. Authors J. Ambrose Little, Jason Beres, Grant Hinkson, Devin Rader, and Joseph Croney, all from Infragistics, have provided a wonderful edition that should capture the attention of both fledgling and experienced Silverlight developers. In fact, the introduction and first four chapters should be mandatory reading: they provide the perfect overview to this game changing technology all .Net professionals should understand whether or not their particular interests run towards Silverlight.
If you have never read a full color technical book, you’ll quickly find this is wonderful addition. The numerous graphics and screen shots jump off the page, making the material easily consumable. In addition, all code and XAML samples are in full color as well, mimicking the default IntelliSense color scheme. This is perhaps the best part of having a .NET volume printed in full color because it allows us to read code on the page in the same manner in which we are used to reading it on screen. I’ve always found it a bit unpalatable to read code on the printed page, but this feature makes the code imminently more readable.
The book itself is very well written and easy to follow. The style of the authors reveals their mastery of the material without being overbearing. This is an extremely accessible book to those new to Silverlight but contains plenty of material for the more experienced developer. While the text is clear and concise, in no way is this a light read. Silverlight is a very large topic and any book that attempts to do it justice needs to be sized to the task. That being said, I would not attempt this book, or many like it, cover to cover. While none of the chapters is superfluous, if you are new to Silverlight or WPF, beyond the requisite 4 chapters mentioned above, I would begin with chapters 7, 8, 12 and 14. I would tackle the rest of the chapters on an as needed basis.
Another item I really appreciated in this book was the frequent inclusion of Microsoft Expression Blend. Blend is an invaluable tool for developing WPF and Silverlight applications and yet I find it frequently passed over in technical publications. Going forward, the more complex XAML based applications become, the more imperative it is going to be for developers to learn Blend, so it is nice to see a Silverlight book give Blend the attention it deserves.
On a scale of 1-5, I give this book 4.5 stars. This book is exactly what it needs to be, a great reference aimed at professional developers. I know that as I get more serious about my Silverlight development efforts, I will be reaching for this book frequently.
Earlier this year I was exposed to The Pomodoro Technique. I tried it out and was impressed by the near instantaneous productivity increases I saw. I even raved about it in a couple of my Rants and Raves posts. I’ve had several people ask me about it, and I always give it high marks. I’ve been meaning to give it a more thorough treatment, and to share how I use it daily to get awesome results.
What is The Pomodoro Technique
The Pomodoro Technique is a low tech, analog approach to time management. Created in the early 90’s by Francesco Cirillo, the main premise of Pomodoro is to carve up your work time into discrete, 25 minute blocks. We’ll call these “poms” for short. Then, you select a task to work on in that time and do everything within your power to only work on the chosen task during that time. Set a timer and get to work: when the timer goes off, stop working and take a short break. Rinse and repeat. After 4 consecutive Poms, take an extended break.
Interruptions are the enemy of productivity. Sometimes interruptions come from the outside, such as phone calls, text messages, or fellow co-workers. But many times we invite them, actively seeking them out (even if we don’t realize it): email, the Internet, Twitter, and so on. We believe that we can handle it because we believe we can multi-task. Truthfully, we are usually deluding ourselves.
I recently visited the Richmond Java User Group to see Andy Hunt, of The Pragmatic Programmer fame give a presentation. In it, he talked about the dangers of multi-tasking, otherwise known as “context switching”. The basic gist is that our brains are not designed for multiple avenues of concentration, and a lot of our effort and brain power gets lost when we constantly toggle from one task to the next.
I have definitely found this to be true: if I can lock myself in to a short block of time and truly devote 100% of my concentration and effort to my task in that time, I can accomplish a great deal. If you are looking for a way to increase productivity without increasing the amount of time you spend in front of your computer, then Pomodoro may be the solution.
How I Pomodoro
In this section, I’m going to outline how I implement Pomodoro. I believe that, like most things, you have to adapt Pomodoro to what works best for you, so in no way am I suggesting this is the best way. Don’t feel you must rigidly adhere to these standards: I frequently break my own rules, but I also acknowledge that I am most productive when I stick to my guns.
Make an empty schedule
At the beginning of each day I write an empty schedule on paper. Yes, write and paper are the key words in that sentence. I find that the physical act makes the whole process more concrete. I map out a schedule for each time block during the day, scheduling lunch and breaks. A typical office day for me is 9-6, so it breaks down something like this:
|< 10||Free Time|
|5 >||Free Time|
As you see, I end up with 5.5 hours of structured work time a day. This doesn’t sound like much, but I can get more done in those unfettered 5.5 hours than I used to get in 8-9 hours of multi-tasking. The Free Time entries are essential. These are the times that I check email, interact with coworkers, read articles, etc. I call it Free Time, but it might better be described as unstructured time.
Make a to do list
On the right side of the paper I make a to do list. This is a granular list of tasks, so I don’t write things like “build application”. Instead, it would more like “Develop view model for page X” or “test ListBox control Y”. Once you get going, you will find that the task list usually begins with incomplete items from the previous day. Just remember this is a living list: I am constantly adding items to my to do list throughout the day. Bugs I find that need to be fixed, new code that needs to be written, new problems that arrive, etc.
Assign an item to the current pom
At the beginning of each pom, examine your list and assign an item to that work unit. Many items take multiple poms, but when an item is complete mark it off the to do list. If you finish an item and have time remaining on a pom, then quickly scan the list and assign another item to the remaining time. One theory says you can always spend more time on the initial task, but frankly I find that wasteful: I’d rather move on to the next item on the list.
Obviously, this requires some prioritization. I tried to place the items on my to do list in order of priority, but it took too much work, and since the list changes during the day I needed it to be more flexible. When I create the list now, it is more of a brainstorming session, and on any given pom I am just as likely to work on item #7 as I am to work on item #1.
Use a Timer
The whole reason this is called Pomodoro is because the original timer used was a kitchen timer in the shape of a tomato. The creator was Italian, and pomodoro is Italian for tomato, hence the name. In the interests of being a purist, I actually bought a tomato shaped kitchen timer online. Unfortunately, it made a “tick-tick” noise which turned out to be extremely distracting and thus counter productive. One of these days I’ll pick up a digital timer, but for the time being I have been using http://e.ggtimer.com/. It works well, makes an audible tone when the time is up, and pops up an alert message interrupting what I am doing.
Now for the hardest part of Pomodoro: when the timer goes o
ff STOP WORKING AND WALK AWAY. Yes, get up from your desk: no email, Twitter, or working “just another few minutes.” Following the schedule and taking numerous mini-breaks are integral parts of the technique.
Stick With It
I use a notepad on a clipboard and each day I flip the page over and start fresh. As I mentioned above, I can get a head start on the day’s to do list by reviewing the previous day’s log. And log is a great term for it, because what I end up with is a historical log of my activities. An unexpected benefit of this is that for staff meetings and stand ups, I just grab my clipboard and my status report is ready to go. It’s pretty impressive when your boss asks you what you’ve done the last few days and you immediately run down a list of items you’ve accomplished or worked on. Also, for billable situations you can easily figure out how many hours you’ve put in on certain projects.
The Importance of Breaks
Breaks are essential to the success of the system. While it may not count as exercise, getting out of your chair is physically good for you. Take a little walk around the office, go to the bathroom, get some water, check in with the boss, whatever: just get away from your work. The typical break is only 5 minutes, but you’ll be surprised how long it can feel. When I am deep into a problem, I find the 5 minutes to be invigorating. I can’t wait for my next pom, so when the break is over I’m eager to work, itching to get back to my computer. When I am stuck on a problem, the few minutes gives me a chance to step away from the issue and reboot a little. And sometimes the solution to the problem just presents itself during my break.
The longer breaks are important too, because you still need time to do other things. I spend about half the time doing nothing (hey, it’s a break!) and half the time checking email, making phone calls, reading articles, etc. Also, since my coworkers know my schedule, it is important that they know when I will be available, which helps to keep them from interrupting me too often.
Respect the Tomato
The most challenging aspect of implementing Pomodoro is not following a schedule or tracking blocks of time: it is getting outside forces to “respect the tomato.” In other words, how the heck do you get friends, family, coworkers, or especially the boss, to work with you in this effort? Honestly, if you can find a one-size fits all solution I expect to see you on the rubber chicken circuit and late night infomercials in the very near future.
I will say that overall I have been able to successfully engender by-in with my coworkers and management. It did take a little effort though, and some training, both for them and for me. The first thing I did was introduce the concept of Pomodoro at a staff meeting. I explained that I was going to be experimenting with a new productivity technique. I walked through the method and explained my schedule. And I specifically asked that they bear with me while I tried this thing out and to do their best to work around my schedule.
I posted my schedule on the door to my office, clearly denoting when I had available time. I then hung an inbox on my door with a note indicating to put all messages, notes, or request for work in the box, which I would check every half hour on break. The general rule of thumb is that if the door is open, feel free to come in. Otherwise leave me a note or come back later. For the most part, this worked pretty well from the beginning, although I did have trouble with one of my bosses, but I’ll cover how I handled that a little later.
I chose the timing of this intentionally: we had a major project due in a severely truncated timetable. I had immediate management support because of the urgency of the project. When I came back to the next staff meeting only 2 days later they were amazed at the progress I was able to make in such a short time span. I gave all the credit to using Pomodoro, and it was essentially a done deal.
Dealing with Interruptions
It is a fact of life that you will have interruptions. Pomodoro does not remove your interruptions, but it does require that you learn how to handle them without breaking your pom.
EMail, IM, and Twitter
In our world of constant connectivity, this is the toughest category of interruptions to handle. For years, I have worked with my email client open, checking it every few minutes and always immediately handling any email. Recently, Twitter has been even worse, especially since TweetDeck alerts me every time there is a new tweet for me to read. In both cases, they are very difficult to ignore and not immediately switch context.
The good news is that these are actually the easiest to control: just turn them off. [I’ll wait a moment while you pick yourself back up off the floor…] Yes, I said turn them off: minimizing isn’t good enough, the temptation is just too great. Oh, and if you are a TweetDeck user, closing the application just minimizes it to the tray, so you will still get the audio notice and a pop up every time a new tweet arrives. To really turn it off, right click the icon in the tray and select “exit”.
When I started doing this, I even tweeted what I was doing and that I wouldn’t be on much for while so no one would think something had happened to me. I allow myself to have them up during lunch and Free Time, but otherwise I shut the clients down.
I haven’t mentioned IM yet, because it’s the one that I haven’t addressed in practice. I only have a few people I IM with, and in those cases I can usually wait to respond. I haven’t found it to be an issue yet, but if I do I’ll turn it off too.
Fortunately I have access to a receptionist who has standing orders to take messages and interrupt me if it is an emergency. In our company, I’m the last line of Customer Service, so when my phone rings it is usually a customer with a technical issue no one else can solve. In those cases, I try to schedule a call back at the end of the pom, but if it really needs attention now, I give it to them. Business is business and these people pay the bills.
Coworkers and Bosses
You have a lot less control over your coworkers. Even though you communicate your plan to them and ask for their understanding and assistance, they will still need some “handling” on occasion. It’s important to remember that you need to be diplomatic: you don’t want to do anything that will cause personnel problems or get yourself labeled as a prima donna.
What works pretty well for me is to give them about 10 seconds. If I can answer their question or solve their problem immediately, I do. If not, I let them know how long I have left in my current pom, and then I make them my first priority when I get out. So far so good. It also helps that they are reminded of what I am doing at every staff meeting.
Obviously, bosses are a little different because of their authority level. How different will depend on your boss and your relationship. In my case, I can typically handle the situation the same way I handle my coworkers, but there are exceptions. When the boss is insistent, impatient, won’t take a hint, or just downright demanding, I do what I have to do (meaning what he wants me to do), but I make sure I let him know the impact he is having. In our office the code phrase is “you know you are breaking the rules, right?” At that point I just remember that the boss is the boss.
The Broken Pomodoro
each of the cases above there is the potential that an interruption will take precedence over your Pomodoro: this is called a broken pomodoro. In this case I make sure I note it on my log and the reason. I then do the best I can to get back on schedule as soon as possible. If something is going to eat into the next pom, then that issue gets added to the to do list and becomes the action item for the next pom.
Watch Your Productivity Soar
I hope this has intrigued you. I know that at the time I heard about this I felt like I was completely floundering, adrift rudderless on a sea of work. Adopting Pomodoro has helped me focus my efforts, increase productivity, and enhance my accountability. Try it out, I think it could help you too. As always, I’d love to hear any comments you may have below.