I am currently about to redesign a running, special purpose and German language social networking web application. The current version is so messed up that we decided to start from scratch. I don't want to run into all the problems again so I have been thinking and reading a lot about:
- Scalability
- Maintainability of the code
- Performance
I argued in a blogpost that for the architecture of our system I would use exactly the order of importance like posted above meaning:
scalability >> maintainability >> performance
Those results where kind of surprising to me since I always thought performance is key essential for creating scalable systems.
- What are your thoughts on the importance of these three factors?
- I also argued that for achieving them one needs to do careful planning and design beforehead. Do you have any other must have advices?
Scalability is a different beast than performance.
Performance is usually measured in how fast an individual request executes. On my local machine with one other user on it, my requests are usually very fast, 10ms or below. Now put that on an externally-facing Internet server with 50,000 concurrent users, and you won't see anywhere near the speeds like that.
Scalability is performance in the aggregate--how well you can support a large number of concurrent requests and still have the system respond in a reasonable amount of time. It's probably going to be the foremost concern in your mind because what good is a social-networking site if only a handful of users can use it at any given time? Your user growth is also probably going to end up exponential, so you need to be in a position where you can easily scale out to more hardware (either in the cloud or your local data center).
If it's a social networking site, I'd rank the items as:
Scalability > Performance > Maintenance