On Side Projects

Should a software developer have coding side projects?

This is a hard question to answer. It is difficult to say what it is that will help an individual developer to grow at any given point in their career. I think that the answer is more of; "at times, probably".

I've been thinking about this a lot lately because I haven't followed up on a lot projects I started. I had assumed that part of it was how I was feeling about work and that a change of scenery (so to speak) would re-ignite that.

And, as I thought on that, I had to admit it sort of did re-ignite it. Just not in the way that I had expected.

I took on a couple of side projects lately. Neither was primarily code related but I'm growing. And these are growing me as a developer. They simply are not (primarily) coding related things or the things I thought I would be working on.

Project #1 - The Dishwasher

How do I know this is a side project and not something I would have done anyway? Well, the back story here helps. For several months, if not well over a year, the dishwasher has been so noisy that we only run it overnight. The dishwasher was still cleaning. It wasn't explicitly broken and that hasn't changed. I don't think it was getting any louder. At least not that I had noticed. And it wasn't cleaning any less well. 

In short, there was no driving factor I could pinpoint. I simply found myself with motivation.

This is the key. More than side projects or the specific nature of them. When you finish work are you tired in general? Or are you just tired in some capacity? It is natural to go to work, do some form of work and to be tired. It is unnatural (in my opinion) to go to work and come back with no capacity or desire to do anything else for long stretches of time. That sounds a lot more like burn out. 

The existence of any sort of side project, is a sign that your job is healthy and sustainable. Your time away from work is not JUST time to recuperate for work. You have time for yourself and your interests. And any additional, external growth is beneficial in my experience.

I had the will to sit down and think about what the issue with the dishwasher might, to follow up and research on those, to take the dishwasher apart and put it back together to get a sense of the effort involved in replacing what I thought to be the problem and then to pull the trigger on buying the part, and putting the work in again.

It is almost impossible to put that much effort into something and walk away with nothing of value elsewhere in my life. 

Of note is, in taking it apart and putting it back together beforehand, I did a MUCH better job re-assembling the second time around with the replacement part. 

This is actually something I do in code a lot as well; design a throwaway prototype version of complicated or novel code. It gives me a sense of the overall thing I'm trying to build and provides insights into what does and doesn't work with my original model. In turn, when I build the real/final solution, it is a lot better than my original prototype. Which is actually a pretty huge deal. 

You might think "of course a second iteration will be better". However, the prototype solves the problem in isolation. This over simplifies the job compared to applying the solution inside of an existing project and so, devoid of any other inherent benefits the prototype has an extreme advantage even though it is a first draft. So, it isn't a given that attempting to apply it in a different set of conditions will still be better. The value isn't in the repetition. While there are elements of repetition, it is actually the understanding and all of the surrounding experiences which yield the most benefit.

A simple example; while I undoubtedly improved some mechanical tasks by virtue of repetition when I went to install the new part in the dishwasher. The biggest gains were actually in areas which were only indirectly related to replacing the part. My biggest issue was the hose clamps. The first time, I rotated the dishwasher onto the right side and the part was hanging. So gravity worked against me. It also dripped onto some boards on that side of the dishwasher leaving me to wait longer before wiring it back up. The second time, I turned it on the left side instead and gravity helped, rather than fought me and there were no electronics on that side. So ease of mind.

The biggest gains had nothing to do with repetition. I didn't get THAT much quicker at the physical tasks, except where ancillary knowledge helped out. And doing this likely wouldn't make me much quicker at working on a future dishwasher. Whereas thinking about how the part is attached and the best orientation might make a huge difference in a theoretical project in the future. Even in something unrelated to dishwashers. 

Project #2 - Arduino + Ratgdo

This one did involve some coding, but if you look at the prior post on this one, which includes the code, you'll realize... this isn't the sort of coding solution which offers benefit to a developer with 15+ years of experience. The code itself is hobby-level in complexity and the insights (such as the averaging results from the sensor and requiring consecutive results before moving on) are junior dev level insights at best. The solution didn't require any more than that. It isn't a jab at me or my coding skills except to say that I refrained from overcomplicating it perhaps. 

While the code may be nothing impressive, the project on the whole is another thing entirely. There was literally no documentation for this. It is probably the first time I took someone else's solution and married it with an Arduino project. It is likely also a one of a kind solution. I did a lot of thinking and planning. 

I knew before I got the board that it wouldn't be able to, on its own, provide the most important functionality with my ancient Garage Door Opener; detect a change in state. So, I was forced to practice architecting solutions. My original solution worked for the intended problem on the first try. Though I still need to refactor a lot of times to get to the final solution. In the end it was a great chance to practice a TON of transferable skills. 

It put the science into computer science for me and reinforced a lot of best practices and reminded me that sometimes I need to stop and rethink if I'm still approaching it the best way. Toward the end, I made a number of substantial changes to how I deployed the solution which would have sped things up had I done them earlier and that is globally applicable insight. 

Conclusions

Neither of these projects was truly a coding project. And I have been neglecting my language learning project, my API gateway projects and my code generation projects. I no longer see that as a down side. I have done VERY code centric side projects and WILL again in the future. I love coding. So, it is inevitable that I will have side projects in that vein again. 

If you're a developer and you like the job for the coding aspect and you don't have any coding side projects, I would just sit back and take stock; do you have other side projects? If so, you're probably doing just fine. If you don't, maybe you're lacking motivation to be productive outside of work. In my opinion, that might be a bigger red flag than you might think. 

Even the same job title in a different company can be vastly different. Don't underestimate the value of a change of scenery on your mental health.

Not being able to rationalize or find the time for any sort of extracurricular growth seems like a red flag. If you're not regularly solving complicated new problems at work, then something else is draining you. 

For me, side projects are have become a gauge of my job satisfaction. I honestly thought I was fine with my last job. I didn't see myself staying forever, but seeing the change in myself and seeing others like my wife see the change as well really highlights it. My wife sees it in general, but I only see it indirectly through these sorts of things. It is the difference between having the motivation and energy to explore myself outside of work and not. I'm a happier, better person and I'm more productive. 

Comments

Popular Posts