Now I Can't Even Build a Small Website

A developer who once built a simple website in a day with PHP now finds himself paralyzed by the overwhelming number of modern technologies, best practices, and tooling choices — a humorous take on analysis paralysis and overengineering.

So, I remember clearly how in 2013 I sat down and wrote a small website in one day.

It was a website about events in my hometown. One page displayed all events for the upcoming week.

I made a page with events and a small admin panel where they could be edited. I had a book on PHP, so I wrote the website in PHP, connected a MySQL database, laid it out in HTML and CSS, and uploaded it to shared hosting. People used the site, and I diligently added events every morning until I went to the army, leaving no one to maintain it. And so the site died.

The site idea still seemed good, and I decided to resurrect it. You'd think — just take it and do it. But working against me was the fact that I barely remembered PHP and had already gained development experience at very large, medium, and small companies.

I decided to get down to business and started thinking.

Hmm, I can't just take PHP and write a few pages mixed with HTML. How will I maintain this without OOP and proper code separation? Besides, everyone says PHP isn't great anymore, and how many new versions have come out!

I probably need something more modern — Node.js or Python. But of course, I won't just write plain code in them because that's not Best Practices. I'll take some framework, like Django or Express.js. Although, these are the most popular frameworks, and there are others, more modern ones — I should look around.

Having decided I'd use either Python or Node.js, I realized that just serving whole pages from the server isn't good. How would I make popup authentication windows or dynamic loading? Certainly not with jQuery, God forbid! I'll take React or Vue.js to build a proper, component-based interface. Angular would be overkill, of course. Using a framework, I need to connect to the backend via API, so I'll use Django REST Framework or something like it. Good thing Express.js can do this on its own — perhaps I should go with Node.js after all. On the frontend I should connect Axios, although now there's Fetch, but is it supported by all browsers? Or maybe I should use Svelte altogether, to learn something new along the way?!

Now I should properly configure my IDE to enforce Code Styles, proper indentation, and never forget to write triple equals instead of double. The setup is difficult because IDE plugins argue with each other and stubbornly use four-space indentation instead of two.

Having figured that out, I realize my code needs to be stored somewhere. Since I'm already quite tired, I'll choose the most popular option — GitHub. Having set up Git and SSH authentication on my computer, I realize I don't know which branching strategy to use. GitFlow is too much while I'm alone, but I can't just commit everything to the master branch, can I? What if someone joins the project, or if I show the repository at a job interview and everyone laughs? There's also the non-trivial question of what to write in commit messages and in what language, but let's leave that for later.

I should think about how to deploy all this on a hosting platform. If the backend is on Python, I need to create a virtual environment and work in it. For some reason, this doesn't work right away on the server — something keeps crashing. By the way, I need to run the application as a service so everything restarts after a crash! Alright, now we're definitely going with Node! For a Node.js backend, I need to find a hosting provider where Node.js works, and they're all cloud-based and very modern. There I need to set up deployment from the GitHub repository, but I can't just connect the master branch because then all my changes would immediately go to the server, and that's not great. Of course, I could deploy manually, but that's not very modern either. Maybe I should think about branching strategy again.

Oh, and the database! PostgreSQL seems good, and I've even worked with it, but maybe I need a NoSQL database? The question remains open of how to deploy it on the server and how to maintain identical structure on my computer and in the cloud without losing data, but that's still far off.

Oh, I almost forgot. Since the frontend is built with JS frameworks, I need to think about Server Side Rendering — it's important that my project gets indexed. Hmm, do I need to use Next.js or Nuxt.js for this? I'll have to think about it.

Since I'm already starting to forget things, I need some kind of task tracker to monitor tasks and progress. Should I use Scrum or Kanban methodologies? Or while I'm alone, can I just wing it? But then how do I track deadlines?

I also haven't thought about TS, ES6, SASS, PUG, GraphQL, OOP, functional programming, immutability, and all that stuff. And I'll definitely need to set up an HTTPS certificate! Maybe I should invite a couple of friends to the team to do everything properly together? Then we can't do without Scrum and Pull Requests.

At this point I was completely exhausted and thought — maybe I should dig up that old PHP book and do everything like in 2013, when I had no clue about any of the above and half the technologies hadn't even been invented yet? It seems like I'm overthinking things. I'll figure it all out later — for now I'll watch a TV show and go to bed, and tomorrow I'll definitely start programming.