Index RSS

Slightly burned out

Happy new year! ... Oh, is it September already? Time flies, even if you are not enjoying yourself, huh?

Let's take a look at my blogging behavior for a moment: I started in May 2020, in a time where the pandemic was still quite new and we where still adjusting. It was the first time for me to work remotely from home for a prolonged time - I did it for single days or a week of being not-quite-sick-but-not-quite-healthy, but otherwise I went to office for every workday of my life. I wrote a few articles in the first months but went silent after October. At the end of the year, my blogging returned for a single article with some enthusiastic goals for this year, but after that? Nothing. What happened?

Working remotely comes naturally for me. I always was more on the introverted side, so I did not miss meeting with my colleagues. I'm really enjoying not having to commute and I have no problems at all to separate my personal life with my job. When I shutdown my work laptop, I am never tempted to work just a little more or to read my work emails. I do a little bit of overtime here and there, but I also work plenty of short days in exchange. Work should be better than ever for me, right?

Not quite. While I am still mostly functional, I often have a hard time motivating myself to do anything productive. On my worst days, I was absolutely exhausted after work and spent my free time by sleeping or watching videos on the internet. At other times, I had some phases where I was staring at my laptop knowing that I just cannot work right now. I just could not do it. This has to be the start of a burnout.

Reasons: No control

I studied IT, not psychology, and I have not talked to a professional about how I feel, so I cannot say for sure why I have a hard time currently. What is it about my work that exhausts my like that? What changed?

One factor is my growing dissatisfaction with software and software development as a whole. Nobody seems to care anymore about empowering users to work efficiently. Instead, software is written to extract the most money from their users. The still dominating desktop operating system, Windows, is not in the focus of Microsoft anymore, but they still milk it however possible.

I started with Windows 95, which I remember as an OS that empowered both inexperienced and power users. If you wanted to, you could modify quite a lot of your user experience. This was, kind of, my gateway drug to playing with Linux and installing and customizing cool window managers.

Back in the present, I recently updated my Windows 10 version on my work laptop. This took multiple hours, for reasons I cannot fathom (that is longer than installing Windows XP took back than, and it is long enough for me to install OpenBSD on a system and configuring it enough to feel comfortable!). It also removed my user account image, which changes the color of my task bar and start menu (!!!). It has become impossible to configure the system colors of a recent Windows 10 version to my liking.

I do not feel like I am still in control of my own system - something that never happens on my private Linux/BSD systems. I restart my Windows to find that some settings where automatically overwritten, and I have to constantly fight against this. I suddenly have a weather forecast in my task bar and have to search for a way to disable it. Searching for programs, settings or files never seems to work (but at least Cortana would search for them on the internet, which is not helpful at all). My system is slow as molasses, even starting the task manager takes forever, and all I can see is that some Microsoft system processes (like Cortana, again) peg the CPU or the disk. Opening an email in Outlook takes up to 30 seconds and searching for emails is nearly impossible, because most of the search results do not even contain my search terms.

Working with Eclipse for my Java development needs is especially frustrating. Pulling the latest commits from git and deploying them to your local development Tomcat? Sure, take a 15 minute break. I do not know why. Maybe we are structuring our project wrong? Maybe Eclipse or one of both Windows instances (we are developing on Windows 10 inside of a virtual machine running on the Windows 10 laptop) are poorly configured? Nobody knows! What I know is that wanting to be productive but having to wait for such long times, multiple times of the day, kills my motivation.

Reasons: Too much bullshit

As I said, it is not only the software but also software development which dissatisfies me. There is so much complexity in even doing the simplest of things! This is a vague feeling, but here are some examples that lead me to feeling that way.

We recently changed our workflow and included mandatory pull requests (PRs). This has its upsides, but also lots of downsides. On one hand-side, we have totally different values: Why are they wasting both their and my time by commenting about a single superfluous empty line in a Java class? Do they expect me to checkout the PR branch again and fix it? I do not care! Let's talk about their superfluous interface that is only implemented once instead! Let's talk about the inefficiency of their code! These are the things I want to get comments on for my PRs as well! But, they do not care ...

On the other hand-side, I reviewed a long PR once which was, to be honest, just terrible. I gave feedback about this weeks before the PR, but it was ignored. And so, everyone was surprised that this feedback suddenly became a blocker for accepting the PR. After many rounds, they started to pressure me into just accepting the PR, so that the feature could make it into the release on time, quality be damned.

Long story short, I am not sold on the notion that mandatory code reviews will improve code quality. But they will absolutely take a lot of time (which, I was ensured, will never be a problem). To really get benefits in return for this time, your team has to have a common understanding of what code quality really is.

PRs are not the only bullshit factor. As I alluded to with my 'superfluous interface' example, we also have a tendency to over-abstract our source code. Java is OOP, which takes experience and taste to do right: Should I just code some functionality as a new method (which would be just a function in other languages), or should I extract it into a new class? Is that one class enough or do I need interfaces and factories and Spring components as well? The experienced members of my team prefer the later. This leads to code that is impossible to understand without an IDE, and still hard to understand with an IDE. This leads to code that can be understood in the small, but that makes it so very difficult to get the big picture.

My team members try to abstract important parts away so that you do not have to understand the lower layers (which, partly, is a reason why we use Hibernate - so we do not have to be database experts ...). This is not bad per se - we can write programs without knowing how to implement a browser, a Java VM, an OS. We do not have to code in assembler, either (even if I would enjoy it). But this leads to abstractions that are supposed to be one-size-fits-all, which in reality is often either a slightly sub-optimal implementation for one feature or a 100% wrong implementation for the next feature. I try to leave important decisions to the caller, as only they know which behavior they will need. And without understanding the lower layers, what will you do if your abstraction fails you? Who will save you? Is it me, again?

As a side remark, most of my colleagues do not have a deep understanding of git. They know their way around their chosen git UI, but still often need me to tell them what to do in their situation. They learned their abstraction (the UI program) so that they do not need to understand the lower layer. Most of them could not do an interactive rebase if their life depended on it. And their git history shows ...

I am also tired of the many discussions we have that have no results. If someone proposes an improvement or states a problem which we should tackle soon, it goes nowhere. And I am tired of the many discussions which are concluded with a result that I could persuade everyone of with great effort, only to have that decision overruled some time later (sometimes days, sometimes months) because nobody remembers why we decided that way. I am so tired of nobody being interested in past decisions - just let's assume that we had no good reasons to decide something!

I feel that caring too much does not pay off. I feel that if I try to persuade my colleagues of a better way to handle things, my effort will be wasted. Why should I even try? That's why I have become more silent in such discussions. But that again leads to a worse situation that makes me feel even more disenchanted with our product and our development methods.

Reasons: I hate web development

There, I said it. This, again, correlates with the previous reasons. Web development is just not enjoyable for me. It is slow and requires many layers of poor abstractions, many ever-changing frameworks, ...

Of course it does not have to be this way. We are doing front-end development while still only writing Java, so we are more isolated from the constant framework churn that goes on in the dreaded lands of Javascript. But we still use a huge framework.

These frameworks are similar to the abstractions my team likes. They are one-size-fits-all. They hide all the pesky complexity that you do not want to know about. They allow you to just implement your project. That is good, right? Again, not quite so. Yes, frameworks a huge because they can handle so many situations that you would have to learn how to handle yourself. But on the other hand, your own software will at most ever have to handle 10% of all the situations the framework can handle. The rest does not just disappear but increases the complexity of working with the framework. These frameworks are nearly impossible to understand.

Maybe we should have just written our own Javascript without using a framework? Maybe we should have just implemented what we actually need? I like to think that this would be an improvement, but this would have never even be considered. Otherwise, we would not have chosen to use Spring for our application, which solves problems for us I never knew we had, while giving us problems I dearly wish we would not have. But that is just what all projects do, so we must also do it, right?

What now?

After much introspection (which you could read a part of just now), I still do not now how to proceed. I try to care less about all the things that annoy and dissatisfy me, but this also does not solve my situation. I do not feel that I should be taking a long sick leave just yet - I am still young enough that I still would like to progress on the career ladder.

But fact is that even writing this blog article took a long time for me. Even the small "Happy new year!" joke from the beginning was something that I thought of in August or July, but I never found the energy to actually write this article. I want to conserve my remaining motivation and spend it on activities that strictly improve my situation.

I had some nice goals for this year, but I do not expect to even tackle a single one right now. This is fine with me, I can do them whenever I feel like it. No pressure.

I want to resume some light blogging. I maybe will write articles that are mostly notes to my future self about stuff that took me too much time to figure it out. I want to do more recreational coding that feels more like fun. Maybe with simple languages like Go or Pascal, maybe even more assembler (I am eyeballing writing some Gameboy homebrews and learned some Z80 assembler for that)?

I do not know whether my situation can improve that way. Maybe I will someday just be unable to work anymore? Maybe I will have to take that long sick leave? Maybe I will someday even go job hunting, to find a more healthy environment for myself? I do not know. I have read a lot of articles from other developers who burned out, so I know that this stuff is serious, but I also do not want to enforce an even more stressful situation for myself. So I will wait.