Check out the Latest Articles:

swing

So that’s it? You think you have a great idea? you’ve pitched it to a few friends and they liked it? Even better they gave you money to make it happen? Well now starts the (real) hard part… Execution!

Part of my work at Pollenizer is to help our clients to go through the challenges of product / service development. So you will find here a selection of advices I have found myself giving frequently. The list could go on forever so I’ve picked the 5 points that I believe are the most frequently under-estimated or misunderstood.


1. The Software: Fast and Simple

To power your web service you will need to pick a software bundle. This is the stack of layers that will go in between your hardware and your users.

A typical software bundle for web applications will include:
- An Operating System: To control your hardware.
- A web server: To coordinate all the elements.
- A database system: To store data.
- A programming language: To interact with your users.


Use something free and widely adopted
:

Go for something free such as LAMP. It will obviously save you the licenses costs and will also make your life easier.

A software bundle such as LAMP is widely used and adopted:
- Direct consequence is that you will find a lot of resources on the web.
- Other consequence is that when it’s time for you to hire a developer it will be easier to find one than if you had selected some specialised and not so common development environment.


Get the most of it
:

As I just said, LAMP is a beautiful package. If you are thinking that free bundles are not that good you are wrong. Most of the time LAMP will definitely fulfill your needs (unless you expect to be the next Google… and even then…). So 9 times out of 10, LAMP will do the job to the perfection. When wisely used it can seriously power hard core application.
Example of popular web-services making extended use of LAMP are: Digg, Facebook, Wikipedia, Wordpress


2. The Hardware: Head in the clouds

Now that you have your software bundle you need some hardware to power it.

There are two things you have to keep in mind when working on a web service:
- First you want your application to cost you the less money possible, especially when you get started.
- Second, you want your application to work properly regardless of the number of users.


Scalability
:

Your application needs to work efficiently regardless of the number of users. Having 10 or 10 000 users will make a huge difference on your hardware. The “cheap” (but at the end expensive) way of scaling an application is to add hardware (one server is not enough to handle the load? Let’s plug another one…), this is wrong because it can become very expensive and will lead to dramatic issues when reaching serious size. At some point, adding servers is just not possible anymore, and what happens during the low-season? You find yourself with a lot of useless and expensive servers to operate and maintain.

The actual trend is to use computer clouds. This is a very interesting approach that takes away a lot of scalability issues. Instead of using a single server, you plug your application into a farm of servers and you pay monthly a bill based on the resources you used. Companies such as Amazon and recently Google are offering such service (and some other, smaller, players like Mosso and Joyent).

Cloud computing is great but there are also some basic engineering / coding habits that will help you to deliver at low cost. For example; optimise your code. You don’t want to have to rewrite part (or all) of your code because your idea is successful. So it is very important to write your code always thinking “Is it the best way to do this? Is there anyway to do that with less code? Can I give a break to the database?”. The extra amount of work is definitely worth it.


Pay as you grow:

What is true for hardware (computing power) is also true for storage and bandwidth. Most semi-pro / pro hosting companies are giving you a credit of bandwidth (and same concept with storage capacity); 100gb/month, 2tb/month…

In a nutshell it means that you always pay for something that you are not necessarily using and it also means that you will run into troubles if you exceed your credit limit (from extremely expensive additional bandwidth to simple suppression of your contract…).

To avoid that you want scalability (again). You want to pay for the bandwidth you are actually using and nothing more and you don’t want to be limited. Here again the solution is in the cloud. Amazon provides a great service with its S3 storage / bandwidth service. Putting your files on Amazon S3 will also resolve your storage issue, as Amazon S3 storage capacity is virtually unlimited. And you will pay only what you are using of course. Google recently started something similar. Probably some very good things are going to happen in the near future on that topic.

3. The Project: Focus on what really matters

Focus first on the core functionality:

Get it right and then you will iterate and polish your application. It will be very hard (impossible) for you to get everything right at the first go. So accept it and focus on what really matters for your first release. If you follow an AGILE process it will be easy for you to iterate and make your product awesome.

No, you don’t need an office

What is valid for your web-service also applies to your company itself. Pay only for what you need. Using Skype, Google Docs and SVN you can work remotely with a team. It means that they can work from home (and from another country…) and that you will save big $$$ every month.

If you insist on having your team physically together look for a shared office space. You will save some bucks and gain a dynamic working environment (Example in Sydney with 98Riley).

No, you don’t need that many employees

Most projects can be started with a handful of talented people. So hold your horse when it comes to hiring.

Find the right people. Use your network, use Twitter, Facebook, your blog… Look for passionate people more than over-skilled. Someone passionate for your project will think out of the box and will always find you good solutions. Someone with a 3 pages resume will rely on its past experience / knowledge and won’t be as innovative and creative. Of course someone with passion for your project AND lots of skills is a good catch. However this type of profile might be harder to find.

Keeping your company at human size (IMO less than 10 employees) in its early stage will obviously save you money and will also make your life easier. Small companies are more efficient to communicate, re-invent themselves, stick together through rough times etc. Only when you’ve proven your project to be successful and when the market is asking you for more, then it is probably time for you to hire more talented people.


4. Don’t rush things: Plan and keep processes simple


Upgrade, don’t degrade:

Once you will have released the first version of your application, your biggest challenge will be to upgrade and improve it. The more people you have working on your application the harder the challenge will be. You can make things easier if you have respected the previous point (Keep it simple).

A good way to make sure that version upgrade will not become a nightmare is to add another layer on top of your application. This new layer will handle version control issues and collaborative work in between your employees. There is various solutions available. I personally like SVN but there are plenty of others for all kind of tastes. You can automate the transfer from your development layer (SVN) to your production server so that the whole development framework run smoothly.


Internationalisation
:

There are a lot of people on earth that actually don’t speak English. Or even if they do speak English as a foreign language, they will always prefer to use a service available in their mother tongue.

So very early in the development process of your application it is strongly recommended to consider the fact that one day you might want your application to speak Chinese (for example…).

The earlier you consider this issue, the easier it will be to handle. You can reduce the amount of trouble you are going to run into by thinking your service from scratch with the internationalization factor in mind. Prefer pure text (as opposed as text into image it will be easier to maintain and translate), icon navigation (an icon might be worth a lot of words), store your text into independent file (or database) so it’s easy for you to add more files when adding languages (one file equals one language)…


5. Your Project’s best friend: User Feedback

Your users are the most precious part of your project. They are the only people that know exactly what your project is good at and what would make it even better for them. So listen to your users and give them the tools to tell you what they think and want.

Sometimes what users are doing of a product is not exactly what the product creator thought of. And it’s ok. If it’s the case with your project, accept it and take advantage of it.

There are many ways to gather your users feedback, various companies are offering solutions such as UserVoice and GetSatisfaction. You can also monitor what people are saying about your project and engage with those Guys. The best tool for this is Twitter (example here with Seesmic).


Conclusion

In a nutshell; Polish your code, keep everything as simple as possible, host it in the clouds, listen to your users feedback and think forward. Sounds easy no? ; – )

If you enjoyed this post, make sure you subscribe to my RSS feed!

  1. Gobi on Monday 9, 2009

    Thank you for this very usefull post !