Archive for February 2009
The LetMeGo Business Plan… Revealed!

Okay… this is not our business plan
– It is a collection of random thoughts we had while German and I were discussing the best methods and algorithms we could use to predict the prices that a lodging could charge for any given itinerary.
If you are interested in the topic, here are some interesting resources:
* Forecasting (an MBA Class from Duke University)
* Forecasting tourism demand with ARMA-based methods
* Autoregressive integrated moving average
* Spline interpolation
* Introduction to Computing with Geometry Notes
We are not sure which method we will end up using, but it is likely that we will use a combination of some of the above.
By the way, this picture was taken by Lucho while we were having dinner at the LetMeGo Immersion. You can see his Flickr photostream here.
Alexander Torrenegra
We Just Upgraded to CakePHP 1.2.1
The Merrcury Engine, the software that will be behind LetMeGo.com, is based on the CakePHP framework. When we started work in the LetMeGo Project a year ago we used CakePHP 1.2 beta. A few months ago German upgraded the Merrcury Engine to CakePHP 1.2 RC2 (release candidate 2). On January 16th of this year CakePHP 1.2.1.8004 Stable was released. Last week, once again, German started the upgrading process of the Merrcury Engine. He just finished the upgrade. There were many changes in the CakePHP framework that we had to pay attention to. Fortuntally, we could easily pinpoint most of the issues as we are close to having 100% code coverage.
It was a long shot, but I think we made a good call when we started using CakePHP 1.2 beta instead of Cake PHP 1.1.x Stable. We were hoping that a stable version of CakePHP 1.2 was going to be ready before LetMeGo went live and, in fact, it happened that way.
Thank you German!
Alexander Torrenegra
The LetMeGo Immersion Has Started!!! The Webcam Is Now Live
The LetMeGo Immersion has started!!! You will be able to check us out live, all the time, via the webcam player embedded below.
I will continue providing updates here in my blog and via twitter @torrenegra.
The LetMeGo Immersion
Why are we doing such a crazy thing? Primarily because of timing, but also because of fun and passion. I recently wrote an article about this type of “development immersion”. You can read it here.
- The People: Henry Canastero, German Gonzalez, Andres Herrera, Nicolas Bohorquez, Luis “Lucho” Molina, and me, Alexander Torrenegra.
- The Time: 90 days from February 23rd through June 6th with six weekend breaks in between.
- The Logistics: Outsourrce It, lead by Leonardo Suarez and Jorge Rubio, is taking care of the logistics (from finding the place, to buying towels, to keeping the place clean).
- The Methodology: RRápido Methodology
- The Input: Balanced, cooked food five times per day, every day.
- The Energy: Unlimited Juan Valdez coffee, caffeinated sodas, caffeinated bubble gum, and Red Bull.
- The Good Life: Massages, manicures, and pedicures every two weeks.
- The Limitations: No visitors, no going out, no TV, no radio, no cellphones… maybe not even Facebook and chat.
- The Challenge: Completing the beta version of LetMeGo before the immersion finishes (while surviving it).
- The Reward: Changing the way the lodging industry works… seriously.
How You Can Stay Up to Date
- We will have a webcam broadcasting 24×7 (sorry, but the bedrooms and
bathrooms will be off view!) - I will be providing live updates via twitter @torrenegra
- I will also post periodic updates on my blog
Questions? Ideas?
Please feel free to post them. It is the first time that I will be leading an effort like this. Your support for me and the team is welcomed!
Cockerr, Our Ticketing System, Reaches Alpha… Again
Back in August I had an “aha” moment about our CRM strategy. As a consequence, we decided to update the Cockerr Scope (the sub-system in charge of tickets and interaction with human reps of LetMeGo). I decided to develop the update myself as it wasn’t very complex. This would allow me to code while I continued doing product development and project management simultaneously.
Very well, after six calendar months (but only 150 hours of coding) I have completed the updates in Cockerr. Among others, Cockerr is now integrated with OTRS and our internationalization schema (easy translation to any language). As such, Cockerr has reached alpha stage once again… Cockerr is now, officially, in version 0.2.
By the way, the experience of coding once again, after so many years of not having done it, was great! I look forward to continue coding while we are in the LetMeGo Immersion.
Alexander Torrenegra
P.S. Here is the current status of all the subsystems required for our beta launch:
| Scope Progress | |
| Scope | Status |
| Web Scope | Alpha Ready |
| Morrison Scope | Alpha Ready |
| Cockerr Scope | Alpha Ready |
| Hendrrix Scope | 10% of Coding for Beta |
| Sinatrra Scope | 50% of Coding for Alpha |
| Rrose Scope | 100% of Requirements |
| Charrlie Scope | 100% of Requirements |
| Mozarrt Scope | Alpha Ready |
| Arrmstrong Scope | Alpha Ready |
| Mastrropiero Scope | 100% of UI Design for Alpha |
| Kubrrick Scope | 20% of Coding for Alpha |
| Brrown Scope | 100% of UI Design |
| Marrley Scope | 100% of UI Design |
| Waterrs Scope | 100% of Requirements |
LetMeGo Has 146 Documented Use Cases. Here Is One.
During the past few weeks, I have had several dialogues about user stories and use cases with other people involved in web development (coders, product developers, project managers, etc.) The conversation tends to be controversial as many people adore Agile Development and, as it is, Agile Development promotes user stories over use cases. My argument is that user stories are good for small apps, but use cases are much better for large web apps that will be improved over and over again for years to come. Furthermore, I think that use cases and Agile Development are compatible (see Rrápido Methodology). My objective in this post is not to find who is right or wrong, but just to show you an example of how I write use cases.
So, as I promised to some of you, here is an example of one of the 146 use cases we have for LetMeGo. It was written following the methodologies recommended in the book Writing Effective Use Cases from Alistair Cockburn. If you find it difficult to read, don’t be concerned. It takes time to get used to read use cases and even more time to get used to writing them. I will never go back to user stories, though. For me, use cases are to user stories what object oriented programming is to spaghetti code.
- Use Case ID: 1001
- Use Case Name: Process Email Bounces
- Level: Blue
- Primary Actor: LetMeGo User
- Context of Use: LetMeGo needs to track whether its users are getting their email messages or not. If not, it should try to correct the issue.
- Usage Narrative: Ermenegildo, a LetMeGo user, changes his email account. LetMeGo sends him an email message and gets a bounce (not an autoresponder). LetMeGo sends him another message, from a different email address, asking him to check the issue. Ermenegildo doesn’t get that message either. Ermenegildo then uses LetMeGo the next day. On all screens of LetMeGo he sees a warning message advising him that we got a bounce from one of the emails we sent him. He closes the warning message. He goes ahead and changes his email address. All emails are properly sent thereafter. Two months after, LetMeGo gets two soft bounces because his email quota is full. LetMeGo sends him, right away, an email from another email address asking him to check the issue. He gets the message, acknowledges it, and cleans his inbox. Next day, LetMeGo starts getting soft bounces once again. After the fifth soft bounce, (not taking into account the soft bounces before his acknowledgment) LetMeGo stops sending him messages for one month. After the month LetMeGo tries to send him messages again. After five new bounces LetMeGo blocks his email address once again. The process is then repeated indefinitely even though Ermenegildo never comes back to LetMeGo.
- Stakeholders and Interests
- LetMeGo Users:
- To receive all messages from LetMeGo and be notified whenever it encounters a problem sending a message to them.
- LetMeGo:
- To make sure that the least amount of emails is sent to email address that may not exist or may be full, so that the chances of being flagged as spammers is reduced.
- To comply with some of the white listing requirements given by companies like AOL.
- To maximize the chances of users receiving messages from LetMeGo.
- Minimal Guarantees:
- Email messages are sent if the email address of a user is not marked as “bouncing”.
- Other auto-responders (as vacation messages) should not be treated as bounces ( http://en.wikipedia.org/wiki/Bounce_message ).
- Success Guarantees: Minimal guarantees plus:
- SuD (System under Design) doesn’t send email messages to email addresses that are marked as “bouncing”.
- If a message is sent to multiple users and one or more of them are marked as “bouncing”, all the other users should receive the message anyway.
- Preconditions:
- The user should be a LetMeGo registered user.
- Triggers:
- 0100 – A bounce message is received from an external server to the return-path address.
- 0200 – A bounce message is triggered by the LetMeGo email server to the return-path address.
- Main Scenario:
- 0100 – SuD (System under Design) receives a bounce message.
- 0200 – SuD marks the email address of the user as bouncing and stores the full content of the bouncing message replacing any previous bouncing message for said email address that was stored.
- 0300 – SuD sends a message to the user’s email address notifying him/her of the error. SuD uses a different return-path for the notification to avoid receiving a new bounce from it.
- 0350 – Empty.
- 0400 – The user visits any page of LetMeGo.
- 0500 – SuD displays a message for user notifying him/her of the last bounce received by the system.
- 0600 – User acknowledges the message.
- 0700 – SuD removes the message and resets the bounce count to zero.
- 0750 – Empty.
- Extensions:
- Extension 0350a: If the user is the owner of an active lodging listing:
- 0100 – For each lodging listing {
- 0100.0100 – SuD deactivates the lodging (see use case “Deactivate Lodging”).
- 0100.0200 – SuD sends an email message to all the owners of the lodging listing.
- 0100.0300 – SuD creates a ticket asking an admin to contact the lodging staff.
- }
- 0200 – UC continues at MS 0350.
- Extension 0350e: If a visitor requests to see the details of a user (that the visitor has authorization to view):
- 0100 – SuD displays a warning message informing about the email bouncing issue. UC continues at MS 0350.
- Extension 0500a: If the bounce count reaches five before the user acknowledges the message:
- 0100 – SuD stops the delivery of messages to the email address of the user by marking him/her as “bouncing”. If the user has more than one email addresses, the other address may still continue receiving email messages from LetMeGo.
- 0200 – 30 days later: SuD resets the bounce counter to zero, thus SuD restarts the delivery of email messages to the email address of the user.
- Extension 0750e: If a visitor request to see the details of a user (that the visitor has authorization to view):
- 0100 – SuD doesn’t display the warning message any longer. UC continues at MS 0350.
- Frequency of Occurrence: Anytime
- Open Issues: None
Musica Maestro!
This message is not about the lodging industry, or technology, or anything else that I usually write about. This message is about the new music album that Maestro, our awesome web designer, just released. Please excuse me if you don’t find this post useful, but Maestro’s music is so good and his passion so great, that I just couldn’t avoid sharing it with you. I want to celebrate his achievement.
Art and dedication are in the veins of our team, but none has more than Maestro. Maestro is a graphic designer, web designer, programmer, bass player, band director, and audio engineer… and he practices them all every week! Maestro is originally from Pasto, Colombia. His band, named Tulia, recently released an album called by the same name. The music offers a combination of jazz and Andean folklore. Lyrics are in Spanish, but you don’t need to understand it in order to enjoy “la musica de Maestro”.
These are my two favorite songs:
You can buy them from Amazon, Itunes, and CD Baby. Tulia’s website is here.
Alexander Torrenegra
Expedia.com, Priceline.com, and Orbitz.com… All Wrong.com’s
Simply put… All of the above mentioned sites (and many others) have their lodgings pre-arranged in geographical areas. Travelers are forced to browse through these categories. It shouldn’t be that way.
Why?
- I hate imaginary boundaries (“Imagine there’s no countries – It isn’t hard to do” ♫)
- The itinerary of each traveler is different
Here is an example: Suppose you are a vacationing traveler that wants to come to New York. If you mention that to large online travel agencies, such as Expedia.com, Priceline.com, or Orbitz.com, they all will show you a few options to stay in Manhattan and, maybe, Jersey City. There are, however, hundreds of additional alternatives that they will never show you…
I just happen to live in Secaucus, New Jersey, 20 minutes away from Times Square via public transportation. Hotel rates in Secaucus are just a fraction (between 30% to 50%) of the hotel rates found in Manhattan. Hotels in Secaucus are also roomier and offer free parking. A lot of people would rather stay here and take the bus or train to the city, yet, the large online travel agencies do not offer these options.
Why is that? Because of the way the major online travel agencies catalog their lodgings geographically
Fortunately, that won’t be an issue for LetMeGo. We will NOT limit the choices of our travelers with pre-arranged geographical areas or imaginary borders. How? The answer is simpler that you can imagine, but it is a secret for now. All I can tell you is that the scope of LetMeGo that will take care of the solutions has reached alpha stage; the Arrmstrong Scope. This goal has been reached thanks to the hard work of Maestro and, primarily, German. Thank you guys!
FYI, this is the current status of LetMeGo:
| Scope Progress | |
| Scope | Alpha Version Ready |
| Web Scope | ![]() |
| Morrison Scope | ![]() |
| Cockerr Scope | 90% of Testing |
| Hendrrix Scope | ![]() |
| Sinatrra Scope | 50% of Coding |
| Mozarrt Scope | ![]() |
| Arrmstrong Scope | ![]() |
| Mastrropiero Scope | 100% of UI Design |
| Kubrrick Scope | 20% of Coding |
| Brrown Scope | 100% of UI Design |
| Marrley Scope | 100% of UI Design |
| Waterrs Scope | 100% of Requirements |
| Rrose Scope | 100% of Requirements |
Alexander Torrenegra
P.S. By the way, the Arrmstrong Scope heavily depends on a project that I greatly admire: GeoNames.org.
When It Comes to Innovation, Less People Is More
Today Voice123 is saying ‘good-bye’ to its most senior developer, Javier Acuña. Voice123 is another Torrenegra Labs venture I preside over. Javier is one of the best software architects, developers, and loyal professional I have ever met. I am going to miss him, but I am also happy in knowing that he will have new challenges in his life.
Javier’s case is not unique. A few years ago I was in direct charge of 25 developers and designers. Now, I am only in charge of five. When people leave one of my teams I frequently get asked and listen to rumors about the future of the companies funded by Torrenegra Ventures. People wonder about their jobs and the well-being and future of the businesses. Sometimes they worry… unnecessarily.
In this post I explain why I think that, as an innovator, that lesser projects and smaller teams actually mean more innovation and more fun, and why I have let my teams decrease in size.
Why I Prefer Handling Less Projects
I have been part of several projects that are now profitable: Torrenegra Internet Solutions (founded in 2000), Rentalo.com V1.0 (created in 2001), and Voice123 (founded in 2003). They all have something in common: During their first few years of existence I was able to invest most of my time on each one of them. I had the availability to pay attention to details and to become obsessed with each one of them, one at a time.
At the end of 2004, I started to believe that I could handle several companies simultaneously. As such, in 2005, I was already leading more than ten companies at the same time. Some of these companies had their own general managers, but they directly reported to me. In total, more than 60 people saw me as their “president”. Unfortunately, it didn’t work. Not one of the companies we founded that year became profitable. Some of them even had to be shut down, such as Casting123.com.
Why did that happen? I could blame the team of people I hired, but I must really blame myself. I spread myself too thin. I wasn’t able to pay attention to the details that successful innovation really requires. I figured that out in 2006. Since then, I have been focusing on one project at a time. First in the Version 2.0 of Voice123, which just broke its monthly sales record last month, and now in LetMeGo.
Why I Prefer Smaller Teams
The first profitable version of Rentalo was coded by me in just three months. Voice123, profitable since its third month, was originally coded by Andres, Milton, and myself, in five months. We grew the development teams as those businesses became successful. We were hoping that larger teams would increase our innovation and development capabilities. We even got to have teams with more than ten developers in them.
It didn’t work as expected, either. We found out that the productivity per capita in large teams was just a fraction when compared to the productivity per capita of small teams. In some cases it was so much smaller that the productivity of a whole small team of four people was better than the whole productivity of another team, twice the size. I have learned many lessons in terms of team sizing and productivity:
- The percentage of time invested in communication grows with the size of the team. A team of one requires no communication. A team of two requires a few minutes of communication per day. A team of eight will require several hours of communication per day plus one person dedicated most of the time to communication coordination: A project manager.
- The feeling of belonging to something decreases as the size of the teams grows. Most people feel more important in small teams. As a consequence, people in smaller teams work with more passion and more dedication to their teammates.
- As a team grows, its need for mid-level management arises. When a team is small, the product developer can interact directly with each person of the development team. In larger teams, the product developer will talk to mid-level management (usually a project manager) that will then transfer the ideas to the development team. A lot of ideas and plenty of time gets lost in there no matter how good the team may be.
Because of the reasons above, I have chosen to limit the size of my team. Today only four people see me as their direct leader and two others as their partner. I also get some other added benefits:
- Once again I am able to code myself, something I love.
- I feel I can make smarter business decisions as I know, in depth, our software architecture.
- I have a closer relationship with all the members of my team.
- I am now experiencing the same excitement that I felt years ago when I was innovating first hand and not only on paper.
All in all, I am happier now, with my small team, than I ever was before.
Why I Prefer Experienced Pros vs. Young Geniuses
Hiring experienced people costs more than hiring recently graduated professionals. In fact, the average salaries of our senior developers today are around three times what we used to pay junior developers just a few years ago. Most of them now also get stock options. So, why do I hire one experienced person instead of three genius grads? Here is why:
- Predictability: Experienced people usually know what they want out of life. They are willing to take long term commitments, as the ones required by LetMeGo.
- Need for speed: Obviously, experienced developers are much quicker at coding than inexperienced one’s.
- It is just fun: Although I like to teach people stuff, I like to learn as well. I learn more from experienced pros than from others.
A few years ago I was proud in leading a large team of tech geniuses that we had discovered before any other company had the chance. Today, I feel more comfortable leading a smaller team of recognized, proven professionals.
I am sad. I will miss “Javi” a lot. I even got to invite Javi to stay in our home while visiting New York. He is the only person I know who is willing to take as many risks eating weird food as I do! For that, and many other things, I will miss him as you miss your friends when you graduate from high school. But I am also happy for him. He will be experiencing many new things. Among others, he will be working for a company that will allow him to fully explore his Java skills, which is something he wasn’t able to do in Perl-based Voice123. Hopefully, in the future, we will be able to work together once again. Both of use will have new knowledge and experiences to share to each other.
Am I masochistic or trying to hide my real feelings? No way! I consider that companies are simply tools to achieve the goals of the people that work at them. I don’t expect anybody to be loyal to a company. Instead, people should be loyal to other people. Javi may be leaving Voice123, but I am sure both of us will stay loyal to each other. In fact, if you are loyal to me, the only thing I ask you is to constantly purse your happiness with passion, no matter what the obstacle.
Next week, as Javier leaves, the development team of Voice123 will be an even smaller fraction of what it used to be. Juan Salcedo, Voice123’s General Manager, will have to determine if a replacement for Javier needs to be hired and, if so, when. Whatever decision he makes, I won’t judge them right or wrong. Juan’s success will only be measured in how profitable Voice123 is in the long term and how happy are the people working at it.
Alexander Torrenegra.
P.S. I don’t like to retain people just by offering very high salaries. A good salary isn’t the only ingredient required by my team members to be happy. They will need many other things as well. I will be able to offer some of those ingredients, but not others. When a person quits I try to retain him/her only if I will be able to give him the tools to grow economically, professionally, and as a human being.
P.P.S. Thanks a lot to Steven, who always helps me proofread and improve my writings on these blog posts. These posts would be twice as boring as they may already be if it wasn’t because of him


