Recovering from a crippled mind
Explaining some troubles I've had and how I now will get back to work
Before we begin I want to excuse myself for the long silence, I have not released anything new in over 5 months and been completely silent on all my socials. The main reason is that the burning passion for programming has somewhat faded. Don’t get me wrong I still really love programming but the constant mood and drive for writing code is not there anymore. I have given some thought to why it could be that I have those feelings. Part of it is probably lasting effects from burnout after the release of Brainroll but another big reason is that my day job which is my main contact with programming has changed pretty drastically from being something I have close to full control over to something I have next to zero control over.
Developer control and current situation
For me, how much control I have over my work is also how fun, interesting and rewarding it will feel. When I use the word control I really mean every sense of the word. I want to be able to decide what tools I use, how I design the system, how I solve the problem at hand. At my previous job we talked a lot about responsibility, every developer had responsibility over their own work which is a very fair, I get to chose basically everything about my projects as long as I know that I’ll be the one maintaining it. This freedom was rarely abused as me or other developers wouldn’t make choices that hinders a future colleague to help or take over the project.
That situation in contrast to how it is now is extremely different. I struggle to think of a single thing in my job I have full control over. I can’t chose my own tools as the project is locked into using a certain set of tools. I do not get to be apart of bigger architectural decisions as this is limited to the role of “architects” and not developers like myself. I do not get to chose how I write my code as a large set of coding style standards and programming patterns are enforced as well as architecture is already laid out for exactly everything so all I’m doing is just puzzling the small pieces together with existing built libraries. Basically “Get X and Y from the database, do this calculations on some of the data and return Z in a file in the format Foo.”.
On top of this there is an extreme abuse of processes for every single thing, I cannot edit a single line of code without it being connected to a ticket which in turn has to be managed by having a set of parameters specified such as which release its going to be apart of and which sprint or project its connected to and what status it has. Then of course this has to be connected with my commits and pull request by keeping track of an ID from Jira that you just have to keep track of. This is not the biggest issue ever but it does get tiring when there are times you just want to roll up your arms and get stuff done, which is very rare as just identifying a improvement in the system and fixing it yourself is not really a thing, you need to run it by someone higher up.
For you who know me I do currently still work with the programming languge COBOL which is known for being cumbersome and overall hated around the web. COBOL itself as a language I wouldn’t say I have that much troubles with, its just a very different type of programming compared to what most people are used to today. A few examples are that every variable is a global, you specify variables in length and there is nothing dynamic. That means if you have a list you need to know how many elements you will have in this list, in newer versions of COBOL this is solved but I havn’t worked with those. Most of the “advanced” made up concepts of classes and data structures are not really present in COBOL which is probably why it is easier to grasp for beginners.
The work I’m doing that I described earlier about getting data from the database and then returning it as a file also applies for COBOL programs, the difference between COBOL and C# is that the C# version is between 200-800 lines long which COBOL is between 2000-10000 lines long. On top of that the COBOL version is obscured a lot which makes any form of maintenance and development take an unfathomable amount of time longer. This code is extremely difficult if not impossible to port for someone that is unfamiliar with the project and the domain, when I as a developer read the code I can follow the data around and get a hunch about what is going on but understanding why it is going on is incredibly difficult.
Even with a very obscure and hard to understand codebase due to its many domain specific problems there is most certainly space for a good developer to find improvements. With the COBOL I work everyday there are tons of things that I could refactor or move over to C# that would make the job easier and the product more robust.
However this type of internal improvements are also stopped because of fears of things breaking or taking too much time from developing new features. This is my main gripe with working in this environment. Instead of evolving and improving stuff I am placed into the maintenance mode just keeping the wheels turning. The good old quote “Don’t live with broken windows” is kinda applicable here because me and other developers are opening our editors everyday seeing problems which we don’t fix and in the meantime we are probably creating new problems while maintaining what we currently have. Working as a consultant in a smaller company there was a lot of room to fix stuff that you wanted to fix and bake it into a task but now in a bigger company there are more rules enforced on the contents of every pull request making this impossible.
Micromanagement and stress
Every organization is driven by profits, we are working because everyone wants to make more and more money. Before I started working at my current job I thought moving from a small company to a bigger one also would mean that there are more resources for just making improvements and being excellent but its not. I have seen countless of more investment in making not only the code and software excellent at my previous position but also big investments in the people working there. Recently I have experienced what “stress” looks like in a large organization and it was an interesting experience to say the least.
Lets reflect a bit on how we dealt with stress at my old job. I would be working and noticing some issue with hiting my deadline, I escalate my findings to my project manager and a discussion is started, about what I need in order to hit my deadline. It can be aid from another developer, some tools or whatever. But sometimes there is just no way hiting the deadline is possible and if this happened my project manager would escalate this to my boss along with what or how much more time we would need. He would deal with the customer and in the meantime we just continue working untill we know more, maybe it is okay to cut some feature or make some other compromise and we woud simply just solve the problem together as a collective. A very important part here is that when I first escalate this problem there is zero blame on me, it is a mutual understanding that we probably didn’t have all the information at hand when making the estimate and the estimate has now changed, it’s not my fault its just reality.
A scenario from my current position would be that I can be working on something that doesn’t have a deadline and I’m told that I have time to learn the domain, take my time to get familiar with the project. Later the deadline would be set, something reasonable that is not given much thought to. The next week suddenly everything can change, the deadline is pushed closer in time so now maybe I’m not so certain it will be able to be finished in time so I will escalate this problem. Solution here is to add more experienced developers to the project because according to the managers they can do my work faster. A new problem arrise where there is not enough tasks for all developers and I am not instead of writing code myself looking at a screenshare of a “better” developer working so that I can learn while watching him write the code that I should have been writing. Also while escalating problems like this there is an underlying tone to the response that I recieve that for some reason it is my fault, not that the circumstances changed.
Why it goes down like this is impossible to figure out because there is some hierarchy of bosses and managers that I don’t even comprehend. I don’t know and I don’t care who made these weird and bad decisions I just care about my toes being stepped on. Sometimes there is good things to take away by watching someone else figure out a solution to a problem but not letting me work is just hindering me from learning to work in the project. It is just adding one more reason to the pile of reasons to not enjoy my craft. In the two different scenarios I bring up the one is a positive experience as I get to be a productive developer, the stress is a sort of positive stress where I just get to work and do my stuff, my team helps me get the things I need in order to do my job while the other scenario I would call it a negative form of stress causing fear to even speak up because when I state a problem my tools were taken away from me and I am suddenly punished for trying to do my job.
How I coped and how I will recover
Ever since I was young I have dived into games when I have felt down or had something really hard or tough to think about. This time one of my true passions and the main way I have had to consider myself a productive human being has been turned into shit. This is why I have basically not been programming outside of my job for like 5+ months. The feeling when I close down work is just not that I want to look at code anymore. This has been an extremely hard thing for me and I didn’t really know how to deal with it and so I have turned mainly to games once again. I have spent an inhuman amount of time playing games the last year and while I kind of hate myself for it I also think it was necessary to come to terms with my situation and slowly figure a way out of the slump.
The difference in my video game habits during this year is that instead of playing games to have fun I have tried to get really good at them. I tried getting good at League of Legends, Dota 2, World of Warcraft, Counter-Strike, Street-Fighter. I played these games and did reach a rank in each and everyone of them that I would say is above average. The interesting thing about these games is that the gameplay changes a lot when you progress in skill, the better you get at these games the more optimized your gameplay has to be, this is often taken to the point of my brain not being able to recognize that I am having fun but instead I’m constantly thinking of every small detail of my gameplay in order to not make a mistake.
Compare this high level gaming to programming. As a beginner programmer I don’t think I ever had fun but as I got better and now when I am able to make my programs do whatever I want I can have a lot of fun with it and at the highest level I have ever programmed (Brainroll) was actually also the time I had the most fun. Bugs are not discouraging or when a new feature doesn’t work as intended because you can work around it or just try something new, its my imagination that is the limit. In hindsight its quite annoying it took so much time to realize.
In my last post I wrote about inviting my personality and other hobbies into my work just in order to increase the fun and re-reading it I kind of inspired myself to get going with that idea again. I have a lot of cool stuff that I still want to create and I do feel the itch of making stuff all the time. I do have a new game on its way which I am close to being ready of putting out a demo version for. I am also experimenting with the idea of an expansion to Brainroll which I want to explore.
For this to ever happen I have had to remove as much of the negative experience from programming possible to try boost my mood to get some stuff going after work and the way I have been doing that is to perform a lot of documenting and automation. I have documented a lot of the small parts that makes the day to day tasks a lot less mentally taxing for me to perform because I can just go through a step by step list of things I need to do besides the actual code to write. For the tasks that I do perform frequently I have created scripts to perform for me. This has helped a lot because I would say like 70% of my job is not to write code but setting up and preparing environments to be able to write the code. Last but not least the management and social part I just have to suck up and play the game in order to get by there is most likely no other way around it for now. Bringing back control to me over my work as a developer will be very difficult as I think I would have to really dive into the domain and the corporate life in the same way I have done with gamedev in order to succeed, I am very uncertain if I want to do that. In one aspect it might be smart because it offers a stable financial life but in the other hand I fear losing the creative and productive part of me forever.
Anyway, these last few paragraphs maybe got a bit incoherent but I really just want to get going, I feel motivated and I think 2025 is going to be REALLY good! I am going to try my best to publish something cool within the upcoming weeks.
Did you know that you get access to the Maraton source code if you become a paid subscriber to my website? If you’re interested in learning or to be a part of the development then don’t hesitate and click the button below!