Did you ever have sleepless nights when your application/app was going online and users were complaining about the bugs? I know that people tends to takes only 20% of the time to have the 80% of perceived functionality working and verify with the users before they decide on what the next 20% of functionalities will be implemented. It is not quite true for my application.
Think about it, if you build a high riser on top the send, what's going to happen? I found that people usually use 20% of time to build something and use 80% of the time to fix bugs. It sorts of serves the purpose for demoing to the customers and gain the time to finish more later. But is it really a winning strategy to go for?
Here are some numbers which reflect how much effort I've invested in the development and deployment work of the blog application:
- I spent 3 days to investigate responsive HTML5/CSS3 with the sample code, developed the blog website locally and deployed it on the production site
- I spent 10 days to do a complete in-depth research and experiment of WordPress package with security in mind and documented the detailed information with pros and cons. This gave me the confidence that I'd made the right decision to abandon it.
- I spent 2 weeks time to set up the development environment for the web application on Windows and created detailed document on each step to take when the system needs to be rebuilt from scratch including installation and configuration.
- I spent 2 months of time to set up the Linux deployment environment from choosing hosting sites, choosing OS platforms, static IP configuration, security investigation and firewall implementation along with various multiple instances of servers configured properly. Then I created a comprehensive document on each step to take when the system needs to be recovered as well as a shell script to fully automate the rebuild process of the production environment.
I definitely spent too much time on each of the tasks except the top one. Why can I make a website with Responsive Web Design (RWD) working from scratch in 3 days over the weekend?
It's the solid foundation being built. I still remember one of my middle school teacher told me very clearly that if you want to build a high riser, build a solid foundation first. The more solid the foundation is, the higher building you can build in the future. This really has a big impact on me.
I'd like to spend a little bit more time on learning and choosing the right methods to build the application system and make it easy to be reproduced. So once system crashes, you don't need to worry about the procedure for fail-over.
In the following posts, I'm going to show step by step for how to build a solid foundation of the development and deployment environment using the full stack of the techniques. It's good both for career growing and for startup companies. I guess people may ask: why do I have to run through the tedious server set up rather than find some shortcut and build the apps quickly? It guess the latter would be good for prototyping and marketing purpose. Maybe this is just something you want to make so that you can move from project to project and trying the fun stuff, especially using tools to show the results as fast as possible. But don't forget, when you spend time on learning each of the tools and fix the problems introduced by using the tools, you are wasting your time because they won't last long. On the contrary, Linux, database server, web server and application server administration and deployment are the solid technical skills which will benefit you in the long run. If you are aiming for the final goal which is to build a scalable product and expect to drive millions of users, you've got to build a reliable foundation.