All modern web applications — whether they are delivering a website, powering an API for a mobile application, or providing a B2B web service — are made with the same family of key ingredients. Developers love to apply physical metaphors to our abstract virtual world, so we describe this as the “application stack”.
When discussing the eleven components below with your technology team, ask three questions for each item:
- Do we need this kind of functionality?
- If we don’t have it now, when will we need it?
- Are our needs unique enough to require something other than a tried-and-true solution for this?
For 80% of the items on the list below, your answers to the above questions should be yes, soon, and no.
Without further ado, here’s a list of things you will almost certainly need to address as you build your application:
- HTTP Server — your face to the world, the waiter who shepherds URL requests to all the other parts of your stack. A straightforward, but important piece.
Apache? nginx? [See our recommendations…](/2013/10/02/best-web-servers/)
- Web Framework — the server code that powers your site. Picking a language and framework represents one of the largest decisions you’ll make, affecting both the product and the kind of developers you’ll hire and groom.
Java? Ruby on Rails? Python? PHP? Drupal? Node.js?
- Transactional Data Store — one or more databases which will support all the data being read and written by your web framework code. Picking the right data stores for your use case is critical for scale and performance.
MySQL? MongoDB? Oracle? Redis? Relational? NoSQL?
- File Data Store — somewhere to serve downloads, videos, images, and static content.
RAID array? Amazon S3? Akamai? Dropbox?
- Background Queueing — all the stuff that happens when your users aren’t watching. Sending email notifications, calculating leaderboards, pre-processing image uploads.
RabbitMQ? Resque? ActiveMQ? ZeroMQ? Amazon SQS? Kestrel? Kafka?
- Caching Layer — when all complexity starts to act like quicksand and you need to speed things up.
Memcache? Redis? Cachely? Ehcache?
- Search — searching through text is a very specialized problem, and typically deserves a specialized solution.
Elasticsearch? Solr? Lucene? Sphinx?
- Email / SMS / Push Notifications — outbound messaging to your customers, another specialty field you likely don’t want to build yourself.
Qmail? Sendgrid? Mailchimp? Urban Airship? PubNub?
- Automated Deployment — rapid, reliable updates to your software, operating systems, and configuration, a must-have for any mature product.
Capistrano? Fabric? Cargo? Make?
- Monitoring — keep tabs on the health of both your systems and applications, get alerted when something goes wrong.
Nagios? Munin? LogicMonitor? Pingdom? ServerDensity? PagerDuty?
- Reporting and Analytics — business intelligence that powers data driven decision making for your organization.
Data warehouse? Dashboards? GoodData? Pentaho? Jasper? Crystal? Google Analytics? OLAP? RedShift?
If you don’t know how your business is handling each of these, ask your tech team. If they don’t know, then raise this list with them, or ask for help from your technical advisor. Or pray.