Monthly Archives: September 2016

Depression and Engagement

One of the major issues I have dealt with so far in my short career is lack of engagement on many of my projects. My managers, for whatever reason, are not around to see what I am doing. They are on business trips. They are swamped with entirely too many other responsibilities. The product owner is ambivalent about what they want to do so we’re waiting around for them to make a decision about something. Not poking at anyone in particular, this has been an issue I have seen a lot of places.

As programmers we’re supposed to be self motivated. We’re supposed to be given a problem and we’re supposed to run with it and get it done. We complain about micromanaging and how it’s hampering our ability to get anything done.

When you get left alone on a project, initially it can feel freeing. You can work without being disturbed. But then at a certain point you realize that you have been given no guidance on what is wanted. It’s like creating an app with no auto layout. You kind of know that there are some components that someone wants, but you don’t know how they want them arranged.

This is the point where things start to affect my mental health.

I start to encounter mental friction where I can’t make any decisions because I don’t know what people want. I know that there is one way they want something but they’re not around to tell me what that is or they don’t know to begin with.

This triggers feelings of depression and despair. I start to feel that success is impossible. I try for a while to do my best, but at a certain point I shut down. I am overwhelmed by choice because I don’t know which one is right. I can’t function. Nothing I do is going to result in success, so why bother?

I feel tremendous amounts of failure and self loathing. I think that I can’t hack it. I should give up on programming. I should go back to working at a call center where there is a script and no decisions to be made. There is no pressure from coworkers trying to sabotage you or pretending like they know more than you do because no one gives a shit and they’re just there to collect a paycheck. You don’t have to pretend like you care about anything other than not getting fired. It’s soothing and restful.

I have had this happen often enough that I can see it coming. I try to engage but so far that has never been successful.

What I need to pull me out of this state is to have something I can solve or get engaged in. I have noticed I will be on the verge of a complete shut down when something will catch my attention. A small light will appear in the darkness and my deprived attention will fixate on trying to solve it. Then my brain comes alive again and I wake up and everything is okay again if only for a little while.

I want to talk about mental self defense here.

I have learned to find things I can do that will pull me out of this state. Usually it’s working on a tutorial. It’s a set of directions with an end goal. You feel like you’re getting something done. It will engage my tired and exhausted brain and lead it like a trail of breadcrumbs back home. It’s not open ended so I don’t get overwhelmed trying to get something working from scratch. I know other people can do that and I can too sometimes, but not when I am engulfed in mental darkness.

Managers don’t want you doing stuff like this. I have tried to talk to them about what I can do to pull me out of this state. I can’t work on the current project. It is causing me to shut down. Is there anything else I can work on so I can mentally recover?

They will purse their lips and say they really need me to keep working on the current project. It doesn’t matter that I am unable to make any real progress on it or that anything I write is going to be buggy as fuck, they want the illusion that I am working on their project.

If you’re working with a manager who isn’t giving you enough constraints to figure out what a successful end condition is, don’t mentally collapse. Try to recognize when you’re starting to shut down. Find things that can pull you out of it.

I know it’s hard to do. You feel yourself getting further and further behind. You’re in a mental terror that you’re going to be fired for not finishing your project. You need to calm down. You need to prevent yourself from going under at all costs. If you break yourself your project is not going to get done. You’re no good to anyone if you can’t function.

If you do break, it will take a while to recover. I see a Reiki therapist who helps me recover from my breaks, but she always tells me to take it easy after she helps me.

I have gotten better at going back to my “analog” hobbies to get away from a computer screen when I feel myself going under. Cooking and doing cross stitch are tactile and engaging and give me a project that I can see progress on so that I don’t go completely insane. It can feel like doing projects is a dodge or a waste of time, but it’s vital time that I need to help my brain recover so I can keep working.

I never think that I am going to feel better. I think that there is no point in trying to do a tutorial because I should just give up and accept that I am a failure. Sometimes I am too broken to work on it, but when I have had a chance to rest, I come back and I feel my brain slowly wake back up and I feel better.

The biggest reason I wrote this is to try and give hope to anyone who feels consumed by mental darkness. I have felt that a lot over the last few years. When you’re in the middle of it you feel there is no hope. You feel you can never do anything great ever again. You feel broken, like everything has been stripped from you and it can be hard to try and engage in something because you’re convinced you will fail.

Please know there is hope. Rest mentally and take baby steps. If you can’t engage in anything, then you’re burned out. Sleep, rest, hike, whatever. Then come back and pick up something structured and engaging.

Engagement is so important to what we do. We mentally need to feel a sense of accomplishment. We need to have tasks that we can complete and see progress in the work we are doing. Creating those meaningful milestones and discrete tasks takes time and mental energy, but it’s necessary to maintain mental health and stability.

A developer career is a marathon and not a sprint. If you injure yourself you need to rest and work your way back up to training again. You don’t want to force yourself over the finish line and wind up in a wheel chair.

Know that you’re not alone. There is a way out of the darkness. It’s not just you.

Off the Shelf Rapid Prototyping

One of my interests over the last few years has been to move more into hardware. My first real job was working with robotics systems and I fell in love with hardware. It was magical to be able to push a button and make something move and know that I am the one that programmed the directions to tell that thing to move.

I have been trying to get some traction in this area, but there is big signal to noise ratio.

One problem I personally have is what I like to call “If you give a mouse a cookie.”

Push the button! Do it! I dare you!

Push the button! Do it! I dare you!

Basically, I get consumed with figuring out how everything works. I get an Arduino and rather than just building something with it, I get consumed by trying to figure out how it was designed, why the chip they used was selected, how does the chip work, what other chips are out there, how do you design a circuit board…

I have been trying to figure out why this derails me so quickly. I realized that I get ahead of myself.

When I am trying to make myself turn an LED on with a button, I feel like it’s not hard enough. Anyone can drop fifty bucks on an Arduino and some LEDs and resistors and do what I am doing. I feel that it’s valueless and that I need to find some way to add value to differentiate myself from everyone else.

That’s getting way ahead of the game.

If you get a group of programmers and engineers together and have them look at something cool, they immediately start thinking about how they can monetize it. We just do. It’s part of our DNA. We can’t just do something cool because it’s fun. Everything has to have a purpose. If you’re doing something cool, there must be a product somewhere in it and you have to figure out how to make something cool before someone else has the idea so you can cash out on it.

Then there are people with the exact opposite approach. They will take something that is really simple, but looks complicated and they will try to monetize it immediately. Sometimes they get lucky and can cash out on a fart app or something simple, but a lot of times you wind up with garbage products on the market that are basically a sensor connected to a Bluetooth connector that talks to a bare bones app.

I want to spend this coming year more fully exploring this space. I think there is a lot of potential out here, but there are a few things to navigate.

  • What would make a good product?
  • What do I need to know?
  • How do I order the things I need to know so I don’t focus on a thing I need in five years before the thing I need tomorrow?
  • How much off the shelf stuff can I use?

The off the shelf question is the part that prompted this blog post. This is a wonderful time to get involved with hardware hacking. Arduino has really opened up things to everyone by providing a consistent and well documented rapid prototyping system. Companies like Adafruit have built successful businesses around the Arduino form factor and programmable LEDs. I think these things are really cool, but they seem to be toys and learning materials rather than serious tools with which to build embedded products. It’s going to take a leap from tooling around with pretty light rings to figuring out an actual real world application.

The other off the shelf question I have is with not just hardware, but services as well.

I recently bought a developer kit for the Particle Photon. So far I am really impressed with this device. It’s connectivity is through Wi-Fi rather than Bluetooth LE. It has an online IDE from which you can flash devices remotely. It is set up with IFTTT so that you can use it to build your own Amazon Dash Button among other things.

This is really cool. You can get a lot of stuff up and running in just an hour. However, I would not feel comfortable using this as a basis for a product I would develop because it has a single point of failure, which is that the hardware only interacts with servers that are controlled by the Particle people. This makes it really easy to get something up and running, but that means that if Particle was ever bought by someone like Facebook, like they did with Parse, you’re at the mercy of a vital service that could be discontinued at any point in time.

It’s really cool to be able to use an off the shelf component to get up and running, but it’s also important at some point to move beyond it. An Arduino is a generically designed device that is supposed to work with a lot of different things. The Trinket from Adafruit and many other development boards are “cheap” but they are not specifically designed for your purposes. I think that I need to be better about embracing these off the shelf solutions so that I can get a better idea about what I want to do and how to get something working, but I also need to keep in mind that if I develop something with these off the shelf solutions, I need to avoid single points of failure. But right now my single point of failure is putting the cart before the horse and worrying about these problems before I am at that point.

I am going to try and be more relaxed about embracing these tools for what they are and use them to learn before over complicating things. Life is a marathon and not a race.