Category Archives: productivity

Gemsets and .rvmrc – Ruby Gem Management Made Easy

RVM is a tool that automatically manage your ruby versions. You can make 1.8.7 and 1.9.2 live together without issues. The installation process is a bit lacking – bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head ) is not really a command that looks safe at first sight. Blindly executing code from the Internet is not for the faint of heart but yep, rvm is really that useful.

I especially love gemsets. They allow you to completely separate your various development environments for each of your projects. Gem conflicts are a lot less common.

You can even automatically change to a gemset for each of your project by using the an .rvmrc file. I use ruby 1.9.2 by default but I have one project that uses ruby 1.8.7. I use a separate gemset called ‘mygemset’.

# create the gemset if it does not exist
rvm_gemset_create_on_use_flag=1
# switch to default ruby version when exiting directory
rvm_project_rvmrc_default=1
# use ruby 1.8.7 with a specific gemset
rvm ruby-1.8.7-p302@mygemset

Pretty neat. Since this file is committed, it also means everyone on the team has the same setup.

Programming is Hard, Shipping is Harder

For the past year I’ve done lots of experimentation with various libraries and I had a lot of fun using ruby. Tinkering is fun, but it doesn’t get anything finished. I have a tendency to hop from pet project to pet project, never finishing anything (or worse yet in my deranged mind, releasing something half finished).

That’s basically what my friend forced me to understand by harassing me to ship an application online (or so my deranged mind remembers from our last conversation :)). Now I can thank him because it’s done.

I give you the The Pomodoro Assistant.

Since I use the Pomodoro Technique at work, I went with a simple app that allows me to manage my pomodoros. The design is ugly and it’s still lacking many features. However it’s online and available for you to use if you desire. And I’m already using it at work so it must be kind of useful.

I’m eagerly waiting for comments and feedbacks.

Keyboard Powered Web Search

For the past two weeks I’ve used DuckDuckGo as my search engine. It’s a search engine built on open-source software. What made me switch is the capacity to navigate through search results with the keyboard using vi-like keys (hjkl).

I didn’t know at the time but Google also allows you do something similar. You just need to go to http://www.google.ca/experimental/ (also works for google.com and I guess most other domains). There you can opt-in to be part of the Keyboard shortcuts experiment. That’s it! J/K are used to navigate through search results, O (or enter) to open them.

Hopefully this is going to be useful for the other keyboard junkies out there.

Git is not (just) Source Control

After many discussions with a colleague about Git, I came to realize that Git is not merely a source control. With time it became a tool in my developer’s sandbox. To develop software effectively, I need (among other) an IDE or text editor, a prompt and countless libraries. I came to rely and trust these tools.

I used many other tools for version control but I saw them as infrastructure – mandatory in the grand scheme of things but not used to improve my productivity.

Git changed everything by allowing me to rethink the way commits and branches work.

  • By promoting small commits that do one thing but do it well, git forces me to split my task in even smaller chunks that can then be commited. This sometimes leads to architectural changes.
  • By making it possible to  reorder the commit history (git rebase -i origin), it pushes me to make each commit clean and atomic.
  • Git makes branching cheap and easy. Like you, I try to code each features in a separate branch. But unlike you, I am undisciplined and often forget. However if I start on a feature and realize it takes slightly longer than expected (and I’m talking about an hour max, not 3 days), I create a branch for that feature. It’s easy and it allows me to work in small, independent chunks. It also allows me to always be able to come back to a stable branch if I need to do a few quick fixes on another part of the project.

Git is not a mere tool – it changed the way I design and code.

Shrinking your Team for Improved Productivity?

Unless things go sour in a project, a team rarely gets downsized. On the contrary, new team members are often added in the hope that more will get done.

What if sometimes, the best action to increase productivity would be shrink a team? I can think of two situations where reduced staffing is a good option:

  • The team realized that it grew too fast. Core team members do not have enough time to effectively coach the rookies.
  • A new features requires an overral architecture change. You can already predict that merging will be hell if new features are added while others are implementing the new architecture.

It’s not always feasible to remove team members – and it’s always a though decision. If the team grew too fast, you might not have any other choice. If you want to do it because you need a big architecture change, it might be possible to shift some members to another module or to start something new that will have no impact on a problematic area. You might also try to make the change coincide with half the team going in vacation (I’m sure many of you felt more productive when most of your team was away).

Next time you’re stuck and have a hard time finding effective ways to make the whole team work together, consider a reduced staff for a few weeks. It might be just what you need.

One tomato, two tomatoes

The Story

My teammates are not afraid to ask help whenever they are stuck. We trust each others. We believe in each other. Disagreements are common but it makes us stronger. We work in an open space so it’s easy to get information to everyone.

That sucks. We talk too much. We get distracted from our own problem to help someone else. We ask questions aloud because we know someone will answer, then an argument follows and every one pitches in. Being passionate has drawbacks.

And then we discovered the Pomodoro Technique.

Tomato

The Pomodoro Technique aims to provide increased productivity by splitting time into small increments of work without interruptions. To explain it in one sentence : work for 25 minutes, take a 5 minutes break. If you want to know more about the Pomodoro Technique, check their web site. I’m far from being an expert on the subject. My goal is to share my experience and what we gained by using this technique.

The Beginning

A few teammates talked about the Pomodoro Technique during an Open Space a month ago. As with many good ideas in open spaces, this one went dormant for a while. An afternoon two weeks ago though, something changed. The sprint was in peril. We all felt the urgency to change though we weren’t sure what. After a brief explanation of the technique, we decided to try one big team Pomodoro.

Results

There was something magical about our first Pomodoro. Silence. Concentration. No interruptions. After 25 minutes we took a break and regrouped. We needed to synchronize. I remember discussing the API between two parts of the application. A quick review – were we willing to try another Pomodoro? Unanimous answer: YES!

We did four Pomodoros for our first day then held a quick retro. We didn’t have concrete numbers but we all felt increased concentration and productivity. We decided to continue for one more day and see how it goes.

Ongoing effort

We’ve been using the Pomodoro Technique for two weeks now. Not all our work is done during a Pomodoro. We do about four Pomodoros in the morning and another four in the afternoon. I’m pretty sure it improved our productivity though I have no hard numbers to prove it. We have a rhythm of very intense work followed by an explosion of discussions to synchronize everyone. Every Pomodoro, we commit to work on one thing. During the 5 minute break, questions are asked, new pairs are formed, help is offered and given, tasks are switched. The work done in a Pomodoro is diverse. It could be pairing, writing documentation, sending an important email, a design session… The important thing is to work on whatever you commited to.

Perception

We do look like weirdos. There is a whiteboard with a big tomato (Pomodoro means tomato in Italian) indicating to everyone else in the company that we are currently in a Pomodoro – do not bother us. We’ve been told that the pace a Pomodoro dictates is very hard to follow. The team doesn’t feel that way at all though. Colleagues outside the team need to get used to us sending them back to their desk if we’re in the middle of a Pomodoro, but a few started to come in and watch our clock before interrupting. One thing is sure : lots of people started to talk about us.

Final Thoughts

The Pomodoro Techniques works. Even when we are not officially in a Pomodoro I find interruptions to be less frequent. We salvaged a sprint and the current one is one the way to success in part due this technique. The fact that the entire team decided to try it at the same time helped a lot to see the effectiveness right away. I tried a few other productivity techniques and so far this one had the most impact. You have to try to see for yourself.

Photo by Darren Hester
http://www.flickr.com/photos/darrenhester/