Starting From Scratch

Digg this!

I have a friend who recently joined a startup in San Fransisco, where they are looking to start development on a product in addition to their consulting business. This prompted a good conversation on what technologies to use when starting a product from scratch with a wide open playing field on choices. There's definitely no one-size-fits-all answer here; the technology choices will be influenced both by the needs/goals of the business and the nature of the application.

The interesting part of the conversation was identifying the questions / criteria to use in guiding the decision making. The answers to these questions definitely vary depending on the growth plans of the business (e.g., is the goal to scale to a big development shop? Is this a small auxiliary effort to a core business like consulting?). Technology choice is about investment. It's the foundation for building something that must be evolved and supported. In my friend's case, time-to-market, cost, productivity, and agility were necessities of the startup environment.

The following questions seem pretty helpful in guiding the decision making, regardless of the particulars of the technology:

  • What skills do I have available right now?
  • Do I have confidence that my technology choices will be able to meet the evolution of the business?
    • Will the application be able to scale?
    • How will the application be managed, monitored, upgraded, etc.?
    • Can the technology base be supported going forward? If an open source library is being used, is their a vibrant community supporting the software to help resolve defects?
    • How easy can I morph the application into a direction that we didn't anticipate form the start?
  • How comfortable are the target customers that I will be selling it to with that technology base if the application must be deployed on premise or installed by an end user?
  • How big is the ecosystem of libraries, add-on technologies, that can be leveraged -even if these capabilities do not seem immediately relevant?
  • What development tools are available and what productivity do they promise?

The answers to these questions can definitely be taken in a lot of directions, even once a programming language choice is made.

Here's a common Java-based technology platform that I've seen for rapid, low-cost development. Java's large ecosystem means ready access to a wide range of add-on open source (Apache has plenty) or commercial technologies.

  • Tomcat, Geronimo, or Glassfish as an app server base
  • iBatis, Hibernate, or OpenJPA for persistence
  • Axis2 for Web Services support
  • Google Web Toolkit (GWT) or DOJO for a web-based app. I'm a big fan of GWT as a way to rapidly develop complex AJAX apps.
  • Eclipse-based development environment
  • Eclipse Equinox w/ web bridge as a component model for assembling an extensible platform
  • SVN for source control. I'd buy services from cvsdude.com for source control, bug tracking, and backup to get up and running quickly
  • Maven for build automation