aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md
diff options
context:
space:
mode:
authorMitja Felicijan <m@mitjafelicijan.com>2023-07-12 18:35:08 +0200
committerMitja Felicijan <m@mitjafelicijan.com>2023-07-12 18:35:08 +0200
commit23a56bd50b04211da3cab45f72c3390711b2416b (patch)
treeab9a4a0136b4cce06dba7d853e296f682f807dbb /content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md
parentcecb4b48a39a3558979b9c4b50e45bf605a3684e (diff)
downloadmitjafelicijan.com-23a56bd50b04211da3cab45f72c3390711b2416b.tar.gz
Moved notes and posts into subfolders
Diffstat (limited to 'content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md')
-rw-r--r--content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md304
1 files changed, 304 insertions, 0 deletions
diff --git a/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md b/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md
new file mode 100644
index 0000000..e5a0b74
--- /dev/null
+++ b/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md
@@ -0,0 +1,304 @@
1---
2title: State of Web Technologies and Web development in year 2022
3url: state-of-web-technologies-and-web-development-in-year-2022.html
4date: 2022-10-06T12:00:00+02:00
5type: post
6draft: false
7---
8
9## Initial thoughts
10
11*This post is a critique on the current state of web development. It is an
12opinionated post! I will learn more about this in the future, and probably
13slightly change my mind about some of the things I criticize.*
14
15I have started working on a hobby project about two weeks ago, and I wanted to
16use that situation as a learning one. Trying new things, new technologies, new
17tools. I always considered myself to be an adventurous person when it comes to
18technology. I never shy away from trying new languages, new operating systems
19etc. Likewise, I find the whole experience satisfying, and it tickles that part
20of my brain that finds discovery the highest of the mountains to climb.
21
22What I always wanted to make was a coding game, that you would play in a browser
23(just to eliminate building binaries for each operating system) where you would
24level up your character and go into these scriptable battles. You know, RPG
25elements.
26
27So, the natural way to go would be some sort of SPA (single page application)
28with basic routing and some state management. Nothing crazy.
29
30> **Before we move on**, I have to be transparent. Take my views on this with
31> a grain of salt. I have only scratched the surface with these technologies,
32> and my knowledge is full of gaps. This is my experience using some of these
33> products for the first time or in a limited capacity.
34
35Having this out of the way, I got myself a fresh pot of coffee and down the
36rabbit hole I went.
37
38## Giving React JS a spin
39
40I first tried [React JS](https://reactjs.org/). I kind of like it. Furthermore,
41I have worked with libraries like this in the past and also wrote a couple of
42them (nothing compared to that level), but I had the basic understanding of what
43was going on. I rolled up a project quickly and had basic things done in a
44matter of two hours, which was impressive.
45
46I prefer using [Tailwind CSS](https://tailwindcss.com/) for my styling
47pleasures, and integrating that was also a painless experience. It was actually
48nice to see that some things got better with time. In about 2 minutes I got
49Tailwind working, and I was able to use classes at my disposal. All that
50`postcss` stuff was taken care of by adding a couple of things in config files
51(all described really well in their documentation).
52
53It is not that different from Vue which I have had more encounters with in the
54past People will probably call me a lunatic for saying this. But you know, it is
55the truth. Same same, but different. I still believe that using libraries like
56this is beneficial. I am not a JavaScript purist. They all have their quirks,
57but at the end of the day, I truly believe it’s worth it.
58
59## Bundlers and Transpilers
60
61I still reject calling [Typescript](https://www.typescriptlang.org/) to
62[JavaScript](https://www.javascript.com/) conversion a "compilation process". I
63call them [transpilers](https://devopedia.org/transpiler), and I don’t care! 😈
64
65And if you want to fight this, take a look at this little chart and be mad at
66it!
67
68![Compiling vs Transpiling](/assets/state-of-web/compiling-vs-transpiling.png)
69
70The first one that I ever used was [webpack](https://webpack.js.org/), and it
71was an absolute horrific experience. Saying this, it is an absolutely fantastic
72tool. I felt more like a config editor than actually a programmer. To be fair,
73I am a huge fan of [make](https://www.gnu.org/software/make/), and you can do as
74you wish with this information. I like my build systems simple.
75
76Also, isn’t it interesting that we need something like
77[Babel](https://babeljs.io/) to make JavaScript code work in a browser that has
78only one client side scripting available, which is by no accident also
79JavaScript. Why? I know why it’s needed, but seriously, why.
80
81I haven’t used Babel for years now. Or if I did, it was packaged together by
82some other bundler thingy. Which does not make things better, but at least I
83didn’t need to worry about it.
84
85I really don’t like complicated build systems. I really don’t like abstracting
86code and making things appear magical. The older I get, the more I appreciate
87clear and clean, expressive code. No one-liners, if possible.
88
89But I have to give props to [Vite](https://vitejs.dev/)! This was one of the
90best developer experiences I have ever had. Granted, it still has magical
91properties. And yes, it still is a bundler and abstracts things to the nth
92degree. But at least it didn’t force me to configure 700 lines of JSON. And I
93know that this makes me a hypocrite. You can’t have it all. Nonetheless, my
94reasoning here is, if using bundlers is inevitable, then at least they should
95provide an excellent developer experience.
96
97I also noticed that now the catch-all phrase is “blazingly fast” and “lightning
98fast” and “next generation” and stuff like that. I mean, yeah, tools should get
99faster with time. But saying that starting a project now takes 2 seconds instead
100of 20 seconds is something that is a break it or make it kind of a deal is
101ridiculous. I don’t mind waiting a couple of seconds every couple of days. I
102also don’t create 700 projects every day, and also who does? This argument has
103no bite. All I want is a decent reload time (~100ms is more than good enough for
104me) and that is it.
105
106You don’t need to sell me benefits if I only get them when I start a fresh
107project, and then try to convince me that this is somehow changing the fate of
108the universe. First of all, it is not. And second, if this is your only argument
109for your tool, I would advise you to maybe re-focus your efforts to something
110else. Vite says that startup times are really fast. And if that would be the
111only thing differentiating it from other tools, I would ignore it. But it has
112some really compelling features like [Hot Module
113Replacement](https://www.geeksforgeeks.org/reactjs-hot-module-replacement/) that
114really works well. It was a joy to use.
115
116So, I will be definitely using Vite in the future.
117
118## Jam Stack, Mach Stack no snack
119
120Let's get a couple of the acronyms out of the way, so we all know what we are
121talking about:
122
123- Jam Stack - JavaScript, API and Markup
124- Mach Stack - Microservices, API-first, Cloud-Native SaaS, Headless
125
126It is so hard to follow all these new trendy things happening around you, that
127it makes you have a massive **FOMO** all the time. But on the other hand, you
128also don’t want to be that old fart that doesn’t move with the times and still
129writes his trusty jQuery code while listening to Blink 182 All the small things
130on full blast. It’s a good song, don’t get me wrong, but there are other songs
131out there.
132
133I have to admit. [Vercel](https://vercel.com/) is really cool! Love the
134simplicity of the service. You could compare it to
135[Netlify](https://www.netlify.com/). I haven’t tried Netlify extensively, but
136from a couple of experimental deployments I still prefer Vercel. It is much more
137streamlined, but maybe this is bias in me. I really like Vercel’s Analytics,
138which give you a [Core Web Vitals report](https://web.dev/vitals/) in their
139admin console. Kind of cool, I’m not going to lie.
140
141This whole idea about frontend and backend merging into [SSR (server-side
142rendering)](https://www.debugbear.com/blog/server-side-rendering) looks so good
143on paper. It almost doesn’t come with any major flaws.
144
145But when it comes to the actual implementation, there is much to be desired.
146I’m going to lump [Next.js](https://nextjs.org/) and
147[Nuxt.js](https://nuxtjs.org/) together because they are essentially the same
148thing, just a different library.
149
150Now comes the reality. Mixing backend and frontend in this manner creates this
151weird mental model where you kind of rely on magical properties of these
152libraries. You relinquish control over to them for better developer experience.
153But is that really true? Initially, I was so stoked about it. However, the more
154I used them, the more I felt uncomfortable. I felt dirty, actually. Maybe this
155is because I come from old ways of doing things where you control every step of
156request, and allowing something to hijack it feels like blasphemy.
157
158More than that, some pretty significant technical issues arose from this. How do
159you do JWT token authentication? You put it in `api` folder and then do some
160fetching and storing into local state management. But doing this also requires
161some tinkering with await/async stuff on the React/Vue side of things. And then
162you need to write middleware for it. And the more I look at it, the more I see
163that this whole thing was not meant to be used like this, and it all feels and
164looks like a huge hack.
165
166The issue I have with this is that they over-promise and under-deliver. They
167want to be an all-in-one replacement for everything, and they don’t deliver on
168this promise. And how could they?! We have to be fair. It is an impossible task.
169
170They sell you [NoOps](https://www.geeksforgeeks.org/overview-of-noops/), but
171when you need to accomplish something a little bit more out of the scope of
172Hello World, you have to make hacky decisions to make it work. And having a
173deployment strategy that relies on many moving parts is never a good idea.
174Abstracting too much is usually a sign of bad architecture.
175
176Lately, this has become a huge trend that will for sure bite us in the future.
177And let’s not get it twisted. By doing this, PaaS providers like
178[AWS](https://aws.amazon.com/), [GCS](https://cloud.google.com/), etc. obscure
179their billing, and you end up paying more than you really should. And even if
180that is not an issue, it comes down to the principle of things. AWS is known for
181having multiple “currencies“ inside their projects like write operations, read
182operations, etc. which add up, and it creates this impossible to track billing
183scheme. It all behaves suspiciously like a pay-to-win game you could find on
184mobile phones that scams you out of your money.
185
186And as far as I am concerned, the most important thing was me not coding the
187functionalities for the game I want to make. I was battling libraries and cloud
188providers. How to deploy, what settings are relevant. Bad documentation or
189multiple versions of achieving the same thing. You are getting bombarded by all
190this information, and you don’t really have any control over it.
191Production-ready code becomes a joke, essentially. Especially if you tend to
192work on that project for a prolonged period of time.
193
194All of these options end up creating a fatigue. What to choose, what not to
195choose. Unnecessary worrying about if the stack will still be deemed worthy in
196six months. There is elegance in simplicity.
197
198> JavaScript UI frameworks and libraries work in cycles. Every six months or
199> so, a new one pops up, claiming that it has revolutionized UI development.
200> Thousands of developers adopt it into their new projects, blog posts are
201> written, Stack Overflow questions are asked and answered, and then a newer
202> (and even more revolutionary) framework pops up to usurp the throne.
203> — Ian Allen
204
205![To many options](/assets/state-of-web/2008-vs-2020.png)
206
207And this jab at these libraries and cloud providers is not done out of malice.
208It is a real concern that I have about them. In my life, I have seen
209technologies come and go, but the basics always stick around. So surrendering
210all the power you have to a library or a cloud provider is in my opinion a
211stupid move.
212
213## Tailwind CSS still rocks!
214
215You know, many people say negative things about Tailwind. And after a lot of
216deliberation, I came to the conclusion that Tailwind is good for two types of
217developers. Tailwind is good for a complete noob or a senior developer. A
218complete noob doesn’t really care about inner workings of CSS, and a senior
219developer also doesn’t care about CSS. Well, at least, not anymore. And
220developers in between usually have the biggest issues with it. Not always of
221course, but in a lot of cases.
222
223I like the creature comforts of Tailwind. Being utility first would make me
224argue that it is actually more similar to [Sass](https://sass-lang.com/) or
225[Less](https://lesscss.org/) than something like Bootstrap. Not technically, but
226ideologically. After I started using it, I never looked back. I use it every
227time I need to do something web related.
228
229Writing CSS for general things feels like going several steps back. Instead of
230focusing on what you are actually trying to achieve, you focus on notations like
231[BEM](https://en.bem.info/methodology/css/), code structuring, optimizing HTML
232size. Just doing things that make 0.1% difference. You know that saying: Early
233optimization is the root of all evil. Exactly that.
234
235I am also not saying that Tailwind is the cure for everything. Sometimes custom
236CSS is necessary. But from what I found out in using it for almost two years in
237a production environment (on a site getting quite a lot of traffic and
238constantly being changed), I can say without any reservations that Tailwind
239saved our asses countless times. We would be rewriting CSS all the time without
240it. And I don’t really think writing CSS is the best way to spend my time.
241
242I have also noticed that people who criticize Tailwind the most never actually
243used it in a real project that has a long lifetime with plenty of changes that
244will happen in the future.
245
246But you know, whatever floats your boat!
247
248## Code maintainability
249
250Somehow, people also stopped talking about maintenance. If you constantly try to
251catch the latest and greatest train, you are by that logic always trying new
252things. Which is a good thing if you want to learn about technologies and try
253them. But for the production environment, you have to have a stable stack that
254doesn’t change every 6 months.
255
256You can lock dependencies for sure. Nevertheless, the hype train moves along
257anyway. And the mindset this breeds goes against locking the code. This
258bleeding-edge rolling release cycle is not helping. That is why enterprise
259solutions usually look down on these popular stacks and only do bare minimum to
260appear hip and cool.
261
262With that said, I still think that progress is good, but should be taken with a
263grain of salt. If your project is something that should be built once and then
264rarely updated, going with the latest stack is a possible way to go. But, if you
265are working on a project that lasts for years, you should probably approach it
266with some level of caution. Web development is often times too volatile.
267
268## Web development has a marketing issue
269
270I noticed that almost every project now has this marketing spin put on it.
271Everything is blazingly fast now. I get it, they are competing for your
272attention, but what happened to just being truthful and not inflating reality.
273
274And in order to appeal to mass market, they leave things out of their marketing
275materials. These open-source projects are now behaving more and more like
276companies do. Which is a scary thought on its self.
277
278And we are also seeing a rise in a concept of building a company in the open,
279which is a good thing, don't get me wrong. But when it is using open-source to
280lure people and then lock them in their ecosystem, there is where I have issues
281with it.
282
283This might be because I have been using GNU/Linux for 20 years now and have been
284so beholden for my success to open-source that I see issues when open-source is
285being used to trick people into a false sense of security that these projects
286are built in the spirit of open-source. Because there is a difference. They are
287NOT! They have a really specific goal in mind. And the open-source is being used
288as a delivery system. Which is in my opinion disgusting!
289
290## Conclusion
291
292I will end my post with this. Web development is running now in circles. People
293are discovering [RPC](https://www.tutorialspoint.com/remote-procedure-call-rpc)
294now and this is the now the next big thing. [GraphQL](https://graphql.org/) is
295so passé. And I am so tired of it all. Of blazingly fast libraries, of all these
296new technologies that are actually just a remake of old ones. Of just the
297general spirit of the web. I will just use what I already know. Which worked 10
298years ago and will work 10 years after this. I will adopt a couple of little
299tools like Vite. But I will not waste my time on this anymore.
300
301It was a good exercise to get in touch with what’s new now. Nothing really
302changed that much. FOMO is now cured! Now I have to get my ass back to actually
303code and make the project that I wanted to make in the first place.
304