Execution is paramount. Ideas are a dime a dozen, but being able to get it done differentiates you.
Although this sounds obvious, getting the core of your idea down on paper in 1-2 sentences is an important exercise. Being able to clearly articulate the problem, and how you solve it will guide every step of the development process. Often founders will have a laundry list of features that they want to provide their customers, which is great for the long-term. Focusing on what you're going to go live with Launch Day will help us get a first version in front of customers as quickly as possible.
Empowered by our key value proposition as defined by our previous exercise, we start to draft a set of requirements for the web application. My preference to accomplish this is creating user based stories. For example, a customer should be able to signup for a subscription with a valid credit card. This is where the concept of a minimum viable product (MVP) comes into play. You have assumptions about the market, but we need to prove them. We must define the requirements that the MVP must have to accomplish this and to start gathering customer feedback.
I will encourage every one of my clients to engage with a designer over using a template. The input that a great designer can have on a project is invaluable towards crafting a high quality customer experience. Designers do increase the head count of the project however and increase the cost of development considerably. Using an already made template is sometimes acceptable depending on your product, and typically cost less than $100.
I'm gonna nerd out here, but this section may help vet me as a developer.
For every line of code written for your app, there is an explicitly written set of tests to ensure that it works properly, despite any changes that could occur elsewhere in the project.
Independent of where I setup the servers, I use Ansible to automate the deployment of the environment. This makes redundancy, reliability, and disaster recovery easier and more predictable.
To provide bugs from making it into production, I use CircleCI to run the test suite on code commit, and automatically deploy on success.
Whether your website attracts 100 or 1,000,000 visitors a day, you don't want any downtime. This risk can be dramatically reduced by having multiple app servers and failover databases.
You have to be prepared for the worst case scenario. If you have catastrophic database failure, you need to have recent backups ready to be restored.
Security is a large topic, but this includes ensuring that services are only exposed as absolutely necessary on your servers. Additionally, you must be aware of recently found vulnerabilities.
Modeling your data has long lasting implications and it's very time consuming to change after the fact. You must take into account anticipated flexibility when planning associations.
If a server goes down, does it make a sound? I'll typically setup Server Density to ensure that your servers are up, as well as put preventative alerts in place.
How do your customers use your app? What functionality to they use, how do they use it, and how often? Getting insight into customer behavior will enable you to continually improve the product. I use Mixpanel to gather this insight.