If we are developing a system, program or script for a business then, we are solving a business needs. Sometimes, we are guided (or misguided) technically in what to do, but it is not rare to find that customers don't know what he needs to do. I explain, a good requirement says "we need a website with a,b,c functionalities with x form and y tables" but usually a customer could say "I want a website".
It is what differentiates a nerd from an engineer. Nerds tend to be poor programmers because they don't understand "what" to build but "how" to build. The HOW is important but the WHAT sets the route.
Let's say we need to build a website for a small SMB (Small and Medium Business). And you start building it, and you pick Wordpress, and you make a portal/ blog, and you create the next sections: * Front page * About us * Categories of blogs * A catalog of products * Contact
Of course, if we are asking after the construction, then we screw it big time!. For example, what the SMB needs? Or more importantly, why the SMB needs a website?. Why the SMB is spending money on the project. Let's say that the SMB sells shoes.
Question, can I sell shoes using the website?. Let's me tell you an experience. I purchase a shoe from the Internet; the shoe was small, it is because some shoe companies (Chinese) uses some weird specifications to size or just the shoes are not fit. So, I prefer to buy it directly, I want to test it, and most people will do that. If I can sell it via the Internet, then the website is considered LOCAL, so my focus is not to sell shoes, but customers must visit my store!.
So, our site will look as follow. * product -> contact us (or visit us). * front page -> visit us * others -> visit us
We aren't even touched the SEO part, but now the site will fulfill its goal.
Only YOU Can Prevent Forest Fires (and bad architectures).
What we know: * It is a website. * Maybe we need a dynamic catalog but that's it, everything else is static. * And Maybe we need some form. Sometimes, customers want a static site, and it's easy. So, let's pick technology. * PHP Is King of the SMB. Why? It is because it is easy to find host/server/dedicated, it is cheap, and it works fine. However, what if our dev team knows Python, so we use Python too. * We don't need a site-editor, for example, we don't need functionality to modify the front page. It lowers the costs and performance. So, Wordpress is gone because we don't need it. * But we need a small table into a database (for the catalog of products) and maybe a table for the contacts (if we have a contact form).
Picking architecture * MVC? Maybe. Our project is focused on the visual, after all, it is a front site. * Services? We don't need it, either a messenger system. SOA is gone. * Microservice? Why? not!. Why we would want to increase the costs?. * Reactor/Angular?. Okay if we're going to kill the SEO, so no. * Monolith? Some developers hate monolith; it is because they don't understand the business needs. In this case, Monolith is ideal: low maintenance costs, easy to program. Do you know the opposite of Monolith?. Fragmented!. * Cloud? It is the decision of the platform but the decision of Cloud versus hosting vs vps vs dedicated it depends on the number of customers. In general: * * Few visitors: hosting. * * Average visitors: vps. However, it requires the installation. * * High demand: a dedicated server. * * I'm clueless: cloud, however, it is always expensive. Sometimes it's cheaper to pick a VPS and later escalate to a dedicated server * * I like useless fad: Serverless. Serverless is not server-less.