This is a true story of a company. At the first of January this year ago this company was a great idea and a few pictures. It had been like that for a while. At the first of April it was a company with a production website doing actual business with actual clients. The 12 weeks in between that have been awesome, nerve-wrecking and scary at the same time. We’ve had to let go of some really cool features and we’ve found out things about the business case that we definitely didn’t know when we said we could build it in such a short time. At the beginning of the project I invented the term “Oh shit erlebnis” and I’ve had a few since then.
Because we were working in short iterations (1 week Sprints), we had awesome focus and we could deal with most discrepancies between dreams and reality quickly.
Making the deal
At the end of last year I got an email of a consultant I knew from a previous client. He was helping a guy start a business and he thought he needed a good developer to build his product for him. It shouldn’t be very complicated, 3 months of work should do it. After a couple of emails, me and Peter Petit met with Reyndert, the man with the plan. He brought with him a spreadsheet with requirements, a flow chart of user interactions and a bunch of ideas. It turned out that he wanted to build a video recruiting product where recruiters could publish video interviews for jobs and people could apply for those jobs using videos of their own. Cool!
Video I thought is a solved problem and I found several articles about solutions to this type of problem, even without doing your own flash coding. I felt safe and comfortable and I knew at Xebia we could build stuff fast. We made a deal to build a first version for a client demo in February (6 weeks after starting the project).
Obviously I knew this was ambitious, but knowing what our guys could do in a day I wasn’t worried that we could work our way out of this. We decided to build this thing with a team of me and two apprentices and use all the help we could get from our colleagues when they were in between assignments. We started off with a team of five, which was more than I had hoped for.
Video streaming, how hard can it be?
The biggest challenge in the project was video streaming, so we attacked that first. It turns out that recording video from the browser is not as easy as I assumed. By this time, the client expected a full featured video recorder and a scalable hosting solution for video too. Woops. We found Nimbb and made it work with our application. Nimbb is a service that allows you to record videos with a flash player that you can talk to from javascript and then hosts the video for you at a fee. This saved us a ton of time, because we didn’t have to set up a scalable video hosting platform or build the recorder ourselves. I thought that was a clever trick, and I believe it made a lot of sense business wise, but it also meant some interesting discussions about the scope of the project, the operational costs, and all that. Lesson learned here is that if you’re going to be smart and think lean, make sure the client is on board with that before you start cheating. You don’t want the guy paying the bills to feel cheated. You should be cheating reality together with the owner, then things are great.
During this time we knew we were on a tight deadline and we pressured the client to deliver designs to us so that we could make our application presentable. The design firm he used delivered a very nice logo, but no acceptable UI designs. Woops. As we worried and pressured, it started to dawn on us that we would have to do the UI and UX designs ourselves too. Getting this right is not an easy job and we had little expertise in the team.
By this time our six weeks were almost over. The first demo to a prospect of our client was upon us. We polished the application somewhat and sat down with our client to look at the damage. By this time the amount of work we had in our backlog had almost doubled. As you know great idea’s tend to have offspring. We knew very well we wouldn’t deliver all of it. It was time to prioritize ideas and slim down the scope.
The client appreciated what we had done so far and agreed that new work had surfaced along the way. But he rather have all of it than go live too soon. I disagreed. Going live soon means early feedback and many of the features we had thought up might not make sense to clients. Discussions got heated, but together we managed to keep things on the constructive side.
The demo was a success, but the application was not finished. After some tough negotiations we agreed that we would spend six more weeks and make sure we could go live with an application that was ready for business then.
Video uploads, and still no design
The client wanted to allow recruiters to upload prepared videos as well as record them, and Nimbb doesn’t support video uploads. We proceeded to integrate with Vimeo to support video uploads. Vimeo supports many formats and has an awesome player that even works on mobile devices. Now with two subscription accounts and some glue code we had solved the hardest problems of our challenge.
In the mean time we had also built most of the website and the work left was to finish up the detailed features of recruiters rating the applications coming in, and the sysadmin interface to support recruitment companies in setting up accounts, removing stale applications and adding labels for the different languages. We were supposed to support multiple languages in the first release, did I mention that?
By this time we had decided to do all the UI and UX design ourselves. We learned a lot and came up with some nice solutions, but as we expected this was hard work.
Production ready software
Since we also promised to host the application we had to come up with some smart tricks to have a production ready setup for our MongoDB and web the nodes. We wanted to have good performance and scalability and also redundancy. We wouldn’t be able to set all that up in such a short time, so we used Heroku and Mongolabs to get it for a (very modest) fee. Forced by Heroku, we removed all use of HttpSession from our application and made it commandline executable with Jetty. After some tweaking, we were quite pleased with the results. In fact I’m so pleased with the result now that you’d have to put a gun to my head to make me use HttpSession ever again. The pleasure of scaling on a PaaS cloud and maintaining truly stateless web code is such a relief.
Champagne
At the end of our twelve weeks we had a demo. The demo went well and by that time the owner had demoed the application to a handful of prospects successfully. Sipping champagne we applied the last small bits of polish and went on to our next project. Of course there are things that we would do differently if we would do it again, or if we had had more time, but I don’t believe that the ROI on “more time” is much smaller than many developers think.
It’s hard to believe that we actually went from an idea to a a real product in 12 weeks, but I’m quite sure it actually happened. Hah!