I started working on this little side project last week. It's a real estate listing application with a heavy focus on geolocation, which I'm building mainly for fun (and hopefully some profit).
I should mention I'm quite the perfectionist and a bit of a control freak, and always liked starting things from scratch. I've heard all the arguments in favor of using well established frameworks for web development yet none stuck. Although I'll do it professionally, I prefer not to touch other people's code other than the odd snippet or tutorial when I'm working for myself.
So it shouldn't come as a surprise that, when starting this real estate side project, I found myself needing to code a lot of low level stuff anew. Sure, I was reusing the core of my homebrewed MVC libraries, but because there was some new stuff I wanted to try with the routing and the user authentication and so on, much of the implementation was unique.
Now, the early stages of a project are always times of unbridled optimist and inspiration. But a lot of it is wasted while coding the foundations. Even trying out that cool new HTTP Auth trick ends up getting boring after a while, for the simple reason that it's got nothing to do with the project's exciting main idea. Which is why lots of really smart people employ mainstream frameworks and/or boilerplate code, in order to get up and running before enthusiasm has a chance to fade. Since I really wanted to develop those boring parts myself, I had a problem.
The night before work on the project was scheduled to start, I went for a drink at my favourite bar and took the laptop along. It was a quiet tuesday night at Pinguim and I meant to try and get some work done in advance.
After sitting at the counter for a while, my good friend the barista suggested I just lay the laptop right there instead of moving to a proper table. Seeing how tall the counter was in relation to the stool I sat upon, the idea was quickly dismissed on ergonomic grounds. However, something else occured to me.
I was well aware of the stand-up, a special kind of meeting utilized in agile development processes like scrum. It's timeboxed and help standing up, forcing participants to keep the meeting short and get to the point. The counter, too high to work on while sitting down, was perfectly positioned while standing up. So, I figured, why not try some stand-up programming? So I did. The rules were simple: don't sit down until:
1. The app is able to CRUD users and real estate properties;
2. User authentication is handled securely;
3. There's a template engine working;
4. I have something that works and can be shown to people.
I ended up standing and coding for about three hours, during which time I managed to dispatch everything on the "boring code" list. Decisions that usually take me hours of consideration were taken in a matter of seconds, logic was simplified as much as possible and absolutely everything that could be turned into a reusable function or class method was. I called it the "Stand-up Hackathon", and you can probably still see an as-it-happened account on my twitter stream.
The experiment failed miserably on the energy and enthusiasm front. Standing up for three hours, especially in the evening, after a long day, was a bit exhausting. I went home late and got up early, so the next day wasn't really that productive. Still, it was a success in terms of pushing myself to get stuff done not only through physical discomfort but also through the pressure of having to be able to show something working to people who must have thought I was crazy.
Surely there must be a middle ground somewhere, and I'm going to try and find it.