Choosing a platform

I am having trouble deciding on the language and platform to build my next software product. The product is aimed at small businesses, it will have server-side logic and a views that are accessible over the web and using a thick client. (Note: Did anybody notice that thick clients are making a comeback, examples include NetNewsWire, FeedDaemon, Mozilla, etc.). How do other small developers choose the platform and tools for a project?

Too many choices

The client side development tools can be most easily narrowed. I want the client application to run on Mac OS X, Windows, and Linux. The most obvious choice is to build using a Java windowing toolkit. Do I use AWT, SWT, XWT, Swing, etc. (more information about developing Java GUI’s can be found at JavaDesktop). Though the selection of ColdFusion or Flash Communication Server might allow cross-platform UI development in Flash.

On the server-side the choices explode. PHP, Python, Perl, J2EE, ColdFusion, Ruby, .Net, arrrrggghhh! I’ve always had most of my development platforms decided for me, now the question is which one best suits my product and audience.

No one ever got fired for buying IBM or Oracle. Except that I haven’t hired anyone and there is no budget. Perhaps Postgres or MySQL makes more sense. But what about good old easy-to-use Filemaker. Maybe MS-SQL Server or Sybase or Berkeley DB. Water, water every where, and not a drop to drink.

Stop the Insanity

The logical, rational process oriented monster inside me wants to break this down in to a set of needs and weightings that can be used to rank each of the choices. Here is a real rough list of the top of my head:

  • What is the cost of development environment?
  • What is the cost of the test and production environments
  • What platforms are the development most familiar with?
  • What platforms are most common for the end user?

I am hoping that these questions will be answered during the design process. The design process is very iterative and not technology focused. It is a combination of design and development methodologies (including Contextual Design/Inquiry, Prototyping, Extreme Programming and other agile methods).

It has been easier when the constraints on platforms, languages and development tools has been imposed on me externally. I have always tried to remain technology agnostic—choosing the right technologies for the specific situation. But now working on my own project I seem to be a little overwhelmed. How have other small developers made their platform choices?