It has begun. The downfall of web development. I don't know how it started, but it seems unstoppable. Layer after layer of unnecessary complexity keeps being added to every part of web development. And it makes the life of modern developers a living hell.
To promote this new trend, I have prepared a list of features that you can add today into your project to make it even more complex.
I am assuming you have an idea for the app you want to build, you have a small agile team and you want to launch it as quickly as possible.
Let's start with the list:
1. Use Docker for everything
I don't care it could work without it
You will enjoy a relaxing delay every time your project starts.
Bonus: you will have to recreate the Docker image every time you install an NPM dependency
2. Use Strapi for labels and texts
I want to be able to change the labels once a year
You will enjoy adding keys to the list of every single one of your inputs and making the frontend code so much more complex (you will reference a key within an object, not just some text, that would be lame and unusable).
Bonus: you will have to keep another exact copy of your labels somewhere in your codebase in case the connection to Strapi fails.
3. Use many Git environments
Only one
main
branch? No way, let's addstaging
anddev
Setup a complex Git environment before your new app is live and enjoy the benefits of having multiple environments that have the same purpose.
Bonus: protect your branches so that no developer will be able to quickly fix bugs without going through the peer review process.
4. Use Typescript
I want to know and control EVERY type
You will enjoy looking smug at poor old Javascript and you will write at least 50% more code. More code means it will be easier to manage it in the future, does it not?
Bonus: your code will become much more readable, especially on the frontend, where you usually just want to style a div.
5. Use styled components
I don't want to use the most powerful CSS feature: classes
You will enjoy writing style after style without any reuse. It doesn't even matter that utility CSS frameworks like Tailwind exist, you want to write CSS-in-JS because it's trendy. Good for you!
Bonus: don't even think about CSS media queries. Instead use useMediaQuery
hooks to do in React the exact thing you would do in CSS.
6. Use microservices to split your data
I am worried about scalability for my brand new app
You will enjoy splitting and duplicating your code in every microservice without any real benefit. Premature optimization is such a joy!
Bonus: it will also be harder to retrieve data from one microservice to another. You will probably need a private NPM package to tie everything together.
7. Do not use code formatters
It looks the same to me
You will enjoy having to review Git commits that change a single quote into a double quote, different new line formats and all of this valuable changes to your codebase.
Bonus: don't even look at code standards, inline those pesky one-line if statements
And there it is, the 7 deadly sins of modern web development that will consume your time, kill your creativity and make a simple web app into a complex beast.
Hope you enjoy reading the article as much as I enjoyed writing it.
Top comments (20)
The use of Docker is justified by the same people who said that Java was good because it could run anywhere. The problem is that to this day, I have never migrated a Java project between different platforms...
I use docker to manage npm and node versions because I don't like nvm
What do you have against nvm? Its fast, easy, and super useful.
It's cuz when I was using it on a particular setup of mine, it slowed the terminal startup by like 2 seconds, and I'm always opening and closing terminals, I was just fed up by it and decided to quit it
defuq? On what System? I can't confirm this as someone who uses it on a daily basis.
Can confirm, I have nvm installed on 2 systems both using Manjaro and It has significantly slowed down my terminal load times.
I am using zsh as my shell on both systems (which is very common) so I wouldn't expect it to be the issue.
I'm pretty sure I was facing that problem with this setup as well, actually, manjaro-i3 zsh and ohmyzsh
Java is pretty good because It can be run almost everywhere but its not just that. There are a lot of thins to consider in modern jvm
I have to confess I quite like TS, but probably because it reminds me of days long go when I used to write C++ and C code. The hype is false, TS is not type-safe or even safer (at runtime), as some claim.
It does provide some helpful IntelliSense (and things like generics, enumerations and interfaces) but none of these survive transpilation into JS. The most useful (everyday) feature can be obtained through establishing good coding conventions across the team and using JS with some JSDoc notation.
In the 2 decades I have been writing applications in JS, I can honestly say, I can count on one hand the number of times I found a bug was down to the incorrect use of a data type.
Add to that having to migrate to new and fancy hipster frameworks (both backend and frontend) approximately every month ... :)
Because, node.js can't be good, no it has to be "Deno" now, and all the effort you've put into mastering Webpack goes out the window coz we're now using "Vite", and just rewrite all of your class components to "hooks" - lather, rinse, repeat!
In the meantime we're mostly producing exactly the same functionality as before :-D
I would say there is a benefit to typescript. I'm more familiar with .NET though, so I may be somewhat biased.
I inherited a plugin from a coworker who had left way before I even joined the company. It was built on Umbraco 6, it didn't use any sort of tooling. When Umbraco started to use angular-js for the backoffice, it was translated to angular-js, but still didn't use any javascript tools. The mess that I was greeted with made me want to throw the whole thing away. I can't remember how many times I said "Where does this property suddenly come from!?" or "Where is this piece of code even used?!", but it was a lot.
I work in an environment with many junior developers and what happens is that if something is optional, it simply doesn't get done (writing comments, update documentation, write tests, remove unused code, etc.). This one project is built by a single developer and everybody else who looks at any pull request is like: "I have no idea what this is, I'm sure it's all good". For a junior developer, to make quality code, we need to set rules and typescript does that for us. Typescript helps us convey the intent of a certain piece of code, which makes it more easy to manage expectations for different flows. If you just work with
any
object, it's for example easier to think: "hey, this object makes its way from here to that other place where I need this data, let's add this property to this object", without considering what the object is supposed to represent. You can still do this in typescript, but by giving objects different names with well-defined properties, you make developers think twice. "Does this list of car doors really belong on the carrot object?"Especially for projects that get touched once or twice per year and move from developer to developer, it's important to make your code speak and that's something that Typescript does for us.
If typescript doesn't work for you and your team, that's ok, this is just my experience.
That being said: I also see plenty of atrocious .NET code that definitely doesn't speak either.
tl;dr: I think typescript is useful, because it helps to manage expectations in code and it makes the code speak.
All of this is true, add some serverless to the mix too
Serverless can actually kill & do away with lots of complexity, if used right ... I'm doing a serverless project right now and I love the simplicity of it - no Docker, no Kubernetes, no "Devops", not even managing a server :)
I agree, but tbf serverless is just another hype trend (although it's way better than microservice hype), it's not always useful
It maybe another hype, but it's a hype that delivers results - I'm using it successfully as we speak:
I'm able to build an application that's 99% oblivious of going to have to run "serverless", and then I can (with a handful of simple tweaks) deploy it as a 'serverless' app - that's huge, as it gives me:
potentially huge (almost unlimited) scalability
not having to manage ANY infrastructure whatsoever - no servers (hence "serverless"), no Docker, no Kubernetes - just forget about "DevOps"
Most "hypes" or "trends" just mean more work and more complexity (looking at you, "microservices") - serverless, from what I can see, really delivers.
Agreed :)
I don't use those much, but, thanks for the humor (and sounds very real to me). And, I suspect the list is much larger than the 7 points!
Reverse psychology! I like it.
This content reminds me of this website motherfuckingwebsite.com/
This is a bunch of pretty simplistic arguments to be honest. You Talk about downfall of web development but these are your frustrations.