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.