Rails on the Run

Rails experiments by Matt Aimonetti

Browsing Posts tagged agile

In my last post I talked about freelancing. Somebody asked for more details about my “agile tool set” so here I am trying to explain more in details what tools I use.

Environment

mb
Most of my work is done on my 13.3″ sexy black macbook

Tiny and powerful, this laptop is a key element to my productivity. Because of it’s size, I take my MB everywhere. However when at home, the macbook is hooked up to my 22″ LCD screen.

chair I also recently acquired a great office chair that seriously makes a huge difference.

Wilson probably didn’t that in mind when he asked about my tool set, however a great work environment will help you working better, seriously!

Software

In the list of more traditional tools, I use Lighthouse quite a lot. Check this old post to know why I chose to use lighthouse.

Iterations, user stories and acceptance criteria are managed in Lighthouse.

gdocs
However, most of my clients have a hard time defining user stories. To help them in this process, we often end up using Google docs.
GDocs comes handy when a client tries to describe a feature and he ends up telling me: that’s too complicated to explain, I’ll write a document and email it to you.

That’s usually a sign that the client can’t break the feature in small chunks or that there’s some confusion somewhere.
Few hours later, I receive a long Word document or Excel Spreadsheet explaining in details how things are intended to work. After a quick import in Google Docs I use my favorite feature: “Insert Comments”

Here is a screenshot of a comment I made on a client’s document:
comment

GDocs lets you have multiple people editing the same document at the same time. While I’m adding the comments, my client answers them and tries to clarify the document. The client can save any revision he wants and export it back to MS Word if he really wants.

I then extract user stories directly in Google Docs. Often the client quickly understands how things work and will write the user stories and acceptance criteria himself. People are familiar with the page format and often feel more comfortable in this environment. I personally move the user stories in Lighthouse and we then only deal with lighthouse (until a new set of feature requires a virtual drawing board)

Communication

I have a daily standup with each client. You have a variety of alarm system you can use to make sure you are not running late. I don’t have any preferences, but setting up a cellphone reminder can be handy if you have a tendency to forget.

To call my clients I use a VOIP service. Actually I have 2 VOIP services, one for my home line and I use Skype for work. (different providers)

skype provides me with a local phone number, voice mail and unlimited calls in the USA and Canada for something like $90/year.

Skype is also great for video conferences or simple conference calls with many people. Clients know that they can ping me via Skype if they need to. (only during work hours) (I use skype with a Bluetooth headset so I can move around when I talk :) )

Time tracking

I tried different solutions but I wasn’t pleased. I couldn’t find a simple solution properly handling time tracking and invoicing.
I ended up writing a custom solution perfect for my needs: when you want something done right, do it yourself :)

pt

I have simple ajax timers I can start and stop easily (I’m planning on writing a widget too).
Finally, the app generates PDF invoices (using logo etc..) which makes my life easier when it’s invoice time :)

Payment

checkout
Talking about invoices. I generate invoices once a week and the payment request is made via Google Checkout. Google doesn’t charge for transfer fee until the end of the year. Clients might be used to paying by check but seriously it’s a real pain. Checks take forever to arrive, they take forever to clear and banks mess up way too often. I personally prefer to manage my finances online and I think the small fee is worth it.

That’s all I can think of for now. Feel free to let us know what great tool you use.

-Matt

I’ve been a freelancer/consultant/contractor/mercenary for many years now. However, until now, I used to do that on the side. Few months ago, after thinking a lot about it, I finally decided that freelancing was what I wanted to do. I left my job and started my own adventure.

The first reason for this switch was a desire to be more involved with my clients’ projects and accept bigger projects. Then there was the obvious flexibility brought by this new position (I can now work wherever I want, usually on my deck). Finally I have to admit that financially things are better now.

This post won’t be about helping you deciding if you should freelance or not. I’m just curious to know how you work, how do you deal with your clients, deadlines, payments etc…
So instead of simply asking, I’ll explain how I do it and I hope that you will share your ways of doing it.

How do I do it?

Choose a client

Clients are the heart of your business. At first, you might be worried not to find enough work and you will take any project. WRONG! this is the worst thing you could do. You would not take any job just because they are willing to give you a salary, would you?

http://flickr.com/photos/14304964@N05/1465525142/

I. find a match

Personally, I believe in Agile methodologies, regular code release, iteration planning, daily stand-ups, test driven development, continuous integration… This is what I call my ‘work values’.
If I see that a potential client’s ‘work values’ are opposite to mine. For instance, he might like the waterfall approach, writing a lot of documentation before we start coding, doesn’t see the essential need for a good test suite, then I know we would not be a good match.

It doesn’t mean that I’m right and she/he’s wrong. It simply means we don’t work the same way and that a work experience together might be frustrating for both of us.

A lot of clients don’t know how to approach software development and they might not have strong ‘values’ yet. In this case, I explain how I work and I try to read their reaction. Sometimes, you can agree on a ‘trial period’. Being freelance, you are more than likely free to quite whenever you want. However, you’ll find out that is not a good experience for neither of you.

II. Check on the project

http://flickr.com/photos/scutter/51227603/

My first rule when it comes to choosing a project: if it doesn’t interest me, I don’t take it.

It’s very simple: to do a good job, I need to be passionate. If the project is boring or simply doesn’t attract me, I know I won’t be able to serve my client the best I could.

Second rule: Code review

Often, you might be contacted by people who already started a project but for some reason need you to take the project over. That happens often when a client tries to save money by taking the cheapest guys around (often overseas) and realize it doesn’t work for them. Or maybe, your client’s main developer had to leave and they need your help. Finally you have the case of a project growing and they simply need more people to work on it.

I always ask for a code review before I accept a job. Why? Simply because a CEO can tell how much he believes in Agile software development, that he has a portrait of David Heinemeier Hansson above his bed and that he knows getting real by heart, a quick look at the code will reveal the truth. It will also tell you a lot about the other guys who worked on the project.

  • testing suite: do they have any? Rspec? Unit test? Selenium? What’s the test coverage? Do the tests pass?
  • test readability: Did the developers try to be clever and the code is very obscure?
  • best practices: Did the team follow most of the best practices? Why not?
  • reinventing the wheel: Did they make a proper usage of plugins/gems.
  • living on the Edge: Are they running on Rails Edge? Would it help?

I usually don’t worry much about how they deploy, since that can be changed easily.

Looking at your code review I try to evaluate few things:

  • what’s the team’s tech level?
  • what kind of pressure the administrative people put on the tech team?
  • what do the teach value?
  • do I need to rewrite a lot of code?
  • do I seriously need to improve the test coverage?
  • is it a real mess and I’d better give up before starting?

A few months ago, Jade Meskill recommended I read “the dip” from Seth Godin. If you haven’t read it yet, get a copy. It’s a very simple and obvious book but it explains very well why and when you should give up and when you keep on struggling. And that’s exactly what we are trying to do. We want to evaluate the effort needed to succeed (if it’s doable).

III. Build a relationship

http://flickr.com/photos/senor_codo/1412917482/

Business is all about relationship. Both your client and you have needs. By creating a relationship you will try to fulfill most of your needs. Let’s look at an evaluation of my professional needs:

  • I need to be challenged
  • I need communication
  • I need guidance
  • I need deadlines
  • I need results
  • I need to be valued

And here is what I cam up with when I tried to estimate my client needs:

  • he needs business value
  • he needs to feel special
  • he needs to be reassured
  • he needs to keep control over the finance
  • he needs to make sure he doesn’t waste money/time with me
  • he needs to plan the future

There we go, we have the base of our relationship. As long as most of our needs are fulfilled, the relationship should be strong.

As you can see by looking at the list above, the client needs to be convinced that I am the perfect fit they were looking for. On my side, I want them to realize that we are lucky to work together and I want them to value me.

Money makes the world go round, especially in a business relationship and especially in the Western world.
Your rates are a simple way to say, this is what I’m worth. If you are willing to pay my rates, you are valuing me. Obviously rates can be negotiated but be careful, somehow they will always represent your value.

So how do I build this relationship?

  • be frank, open and transparent.

I don’t want my clients to feel that I’m hiding things from them. For instance, I’m always running two projects at the same time and I make that really clear at the beginning before I start working on a contract. My client A knows that I will work 17-20 hours a week on his project and 17-20 hours on a different project. If I have to miss one of our stand-up, I usually explain why.

Trust is very important when you are an outsider and even more when you work remotely.

  • Provide visible business value on a weekly basis.

At least once a week, I have a quick demo with my clients and if possible their co-workers. This demo is really important for a client since he can then visualize the business value added to his product. He will feel in control, reassured and will be able to evaluate the situation and plan the future of the product. Usually clients who worked with other developers/methodologies also feel special since they would usually only see business value at the end of the project. By the way, the demo is usually done on the production application so we are talking about real business value.

  • Make the client the center of the decision making process

In my usual process, we have a special meeting every monday. During this meeting, we plan the work for the coming week/iteration. I simply help the client breaking down his tasks in small chunks that we could handle in a week. During this meeting we also agree on this iteration priorities. In general we already created a queue/backlogs of tasks that need to be executed. I simply let the client make his choice to what is really important. In general a client wants everything done right away exactly how he has it mind. Well… the reality is really different. A client doesn’t have to understand the concept of polymorphic association to make decisions. Actually, he doesn’t care how you do it as long as it’s well done. However, your client should know how to prioritize things, he probably already does that all day long.
Converting the technical details into simple concepts that make sense to both you and the client will seriously help the project. I don’t have to worry about delays, I don’t make these decisions, my client does that for me and he likes having control over budget/time line.

To sum-up, I believe that by choosing a client that matches my view of software development, a project that sounds interesting to me and building a strong relationship, we will have a good end result and a win-win situation.

What about you? How do you manage your projects, clients? Do you agree with me, or do you think I’m idealist and in the real world things don’t happen like that?

lighthouse logo is one of my favorite web application of the moment. It got publicly released last April (2007) by the activereload ninjas.

Since then, they also released warehouse

but I’ll keep that for another post.

I’ve been using Lighthouse for a little while and I have to admit that I was a bit confused at first. I’d like to share with you why I’m really pleased with Lighthouse and why I think you should consider using it too.

You have probably figured out, I’m a little biased. So let me give you my conclusions right away.

The 2 things that threw me off when I switched from trac to Lighthouse were:

  • the lack of integration with Subversion
  • the weird way of organizing tickets

SVN integration:

So, no Lighthouse doesn’t have a repository browser, you would need to use warehouse, trac, retrospectiva or another tool. I personally don’t think there’s a real need for such a tool, but others might disagree. However, Lighthouse has a subversion beacon(Beacons are services that can be used to interact with Lighthouse). You can really easily install the beacon on your subversion server and committing code will leave a comment in your ticket, add a tag, change the status etc.. check this video to see how it works. That’s something I never did with Trac and I spent a lot of time editing tickets to mention the changesets related to issue related in the ticket.

SVN integration conclusion: better than expected

Organizing tickets:

I like having my tickets well organized. When i switched to Lighhouse and I only had tags to organize my tickets, I felt a bit lost. Actually Lighthouse doesn’t only have tags, it also has milestones. My milestones are usually really simple: iteration 1, iteration 2, iteration 3, investor demo 1, iteration 4, beta etc… Milestones aren’t used to classify tickets but to give them a deadline. So I was still facing an issue since I wanted to organize and prioritize all my user story tickets, bug reports, feature requests etc… using tag is ‘ok’ but finding your tickets later on is a pain. I decided to do something I’ve been doing with trac for a while: adding a keyword in the topic line. For instance I would create a new ticket like that [bug] a user can’t use utf-8 characters in his name. It worked ok but I was still missing something. What I didn’t know was that Rick and Justin already thought about that and came up with a simple/cool solution: ticket bins. Basically, a ticket is just a pool of tickets sharing the same criteria. Creating a ticket bin is dead simple, search for tickets, save the search criteria. That’s it.

ticket bins

I could now start using my critical, essential, nonessential tags and create bins for them. What I love with bins is that they are not folders. A ticket can be inside many bins. For instance, my critical UI open bug will be in my current bugs bin, critical bugs bin and in my UI bin. (I don’t actually have a current bugs bin, but you see my point.)

User stories/bug reports/new features can all be entered via the same interface and you don’t have to worry since they can be easily sorted using your ticket bins.

Organizing tickets conclusion: awesome


What about Basecamp?

Basecamp is great but even DHH says it is not meant for managing development projects. It’s really meant for marketers and managers, in other words: my clients. But you still need a good way of tracking your code, Lighthouse isn’t perfect and I wish it had a better support of user stories but it’s by far the best tool I found so far. Regarding the lack of user stories/criteria support, maybe I’ll just write my own application and use their beacon interface to integrate both apps together…