Sunday, July 10, 2011

On using new technology and setting up infrastructure

It's very hard to build a startup; it's even harder to build two at the same time, especially since I have a full time job. For the past few months, most of my free time were spent on coding. Let me share some progress.

My first project is Neytap, a classifieds for room rentals—which in Bahasa Indonesia is called kos (correct term is indekos, although sometimes people write it as kost or kos-kosan). I'm aware that there are some similar websites already, but competition is always good :) It has just reached version Private Alpha and right now is under development for Private Beta.

My second project is a location-based service. I can't tell you much about it since it needs to be in stealth until certain stage of development. I can only say that, for this project, I have a co-founder.

On using new technology

Both projects use JVM-based languages: Java, Groovy and Scala. I'm currently learning Scala, so I try to use it as much as possible. Groovy is used for scripting (like one-time off code) and Java when I'm stuck with Scala :D

There's an important lesson that I want to share with technical founders who, like me, like to tinker with new technology: Building startups with technology you're not familiar with is a bad idea.

I'm not talking about quality (since you're not familiar, you might develop sub par solution), but it's all about time allocation. The point is, every time you want to use some fancy stuff in your project, ask yourself, "How much the distraction from achieving my target (delivering project)? Will it add significant value (i.e. "worth the time")?"

I spent a significant time learning new stuff instead of working on actual product for these two projects. Knowledge-wise, it's not a waste. Goal-wise, it is. I decided to fallback to technologies I'm familiar with, and adding just a bit new stuff that I'm sure will improve my productivity.

Infrastructure setup

You can code immediately without any documentation (URS, Diagrams, etc), which is exactly what I did. But at some point you will realize that you need some order. You need at least an issue tracker.

Important lesson: Use what you're familiar with and don't spend too much time setting it up. I'm familiar with Trac, Redmine and JIRA, but all of them are not trivial to setup for me (YMMV). I end up using YouTrack. It's free for 10 users, no installation. Just download the JAR file and run from command line: java -jar youtrack-3.0.jar 9999. This assume you have Java runtime installed,

The next thing in mind is a version control system (VCS). You must use VCS. Use the one you're most familiar with (if you're familiar with none, then stop coding and learn one, Git is good).

Important lesson: If you don't like to wait, make sure your infrastructure is fast. Get a good computer with enough CPU and RAM. If you work alone, setup issue tracker and VCS in your workstation (localhost). If working with team, use the fastest server-based solution. I use Unfuddle for Git and installed YouTrack in an EC2 located in Singapore. If submitting an issue or comitting code take too long, you'll be tempted to open Hacker News and not working :D


In conclusion, remember not to spend too much in either "research" or setting up infrastructure. In the end, it's your code that matters.

5 comments:

  1. It's a little bit out of topic, but I'm curious :D

    How do you manage your time to do those projects. Do you have a fixed schedule? And how many hours/week do you spend? Thanks ;)

    ReplyDelete
  2. @bustanil i usually allocate 20 hours/week, the exact timing is flexible (as long as it's 20) :) use issue tracker bro, it helps.

    ReplyDelete
  3. You nailed it on the HN part :D

    ReplyDelete
  4. From what I've read somewhere, I notice that you deploy your app to google appengine. Which datastore API do you use? JPA or JDO? or lower level framework such as Objectify?

    ReplyDelete

Looking for my geek side?