Share

Currently, I am my employer’s sole software engineer.  We used to have another, but he resigned.  Even then, we never worked together on anything.  At my last job, I was one of two developers.  To be fair, neither employer is actually in the software business…. but the both had a very real need for an in-house developer.

My current employer relies on my abilities to streamline it’s operations and the operations of our clients via automation and tools.  I spend a LOT of my time developing one-off tools and scripts, as well as entire frameworks of reusable code to make things more efficient and save our staff and the our clients’ staff time.  I also build full-blown enterprise applications with SQL databases on the back-end.  Management tools, deployment tools, migration tools…. you name it.

But there is only one problem….. I do this alone. Now there is some advantages to this:  For starters, I maintain absolute control over the codebase.  I have final say in how it gets written, what language it gets written in, etc, etc.  I also have the flexibility of working from home from time-to-time and I get the resources I need to get things done (without much argument and without much questioning) because there isn’t anyone else there to refute my needs or compete for said resources.  Plus, I can work at my own pace (except if some crazy short migration or deployment schedule gets dropped into my lap at the last minute) for the most part.

But there is also a dark side to coding alone: basically…. you’re working in a vacuum.  You don’t have anyone to collaborate with.  If you get stuck, Google is your only friend.  There is no one to check your work, make sure you stick to best practices or proper development guidelines, test your code, help look for bugs, etc.  You’re one your own.  I do have people I can collaborate with from a design perspective though.  These guys are Systems Engineers, Network Engineers, Support Managers, and technicians.  Their input is quite valuable, because they are technical people and they know how software should work.  They also understand usability and can usually point out things that will probably drive a user nuts or leave them totally confused.

But I don’t have anyone else who actually understands code….. especially OOP.  Sure, we got a couple guys who can write some quick-and-VERY-dirty VBScripts or batch files, but thats about it.  Don’t misunderstand though… these guys are very talented individuals, but they simply aren’t Programmers.  There is a big difference.  A REAL programmer lives and breathes code… and understands multiple languages, knows when to use the right tool for the job and has a thorough grasp of OOP.  So while I still love what I do, and want to continue doing it, I often find myself with a sort-of “writers block” because I just can’t see a way forward.

This can be for a multitude of reasons:  didn’t get enough sleep, caffeine wore off, medical issues, totally stumped on a piece of code I can’t fix, too many distractions….. whatever.  I’ve had days where I’ve stared at my computer screen drawing a complete blank and barely capable of writing even a few lines of code.  Usually when this happens, I’ll try to divert my energy to documenting existing methods in a library, compiling API documentation, or what-have-you just so I can keep moving and making forward progress.  But even that can be a chore sometimes.  When you are totally responsible for the design, testing, development, documentation, and implementation, and all other aspects of a project,you WILL make mistakes. It is unavoidable.  Bugs are going to be present no matter how hard you try.

So I sit and stare at the code.  Read and re-read books, articles, class diagrams, etc in an attempt to figure out the best approach to solve a problem or analyze my code to determine if what I have is the best approach and if the direction I want to go in is correct and efficient.  This leads to a condition commonly referred to as “analysis paralysis”.  You keep analyzing over and over, trying to figure out what to do next or how to fix a bug and how its going to affect the “big picture” and not actually getting anything significant accomplished.

Coding without collaborating is not ideal.  I understand why some people would be drawn to it, since programming was traditionally solo task in the days of yore, but in today’s world, large projects simply cannot be accomplished alone.  Its a dead-end.  In my case, it just isn’t feasible to have multiple programmers at our organization.  For the most part, this hasn’t been too much of a problem so far because I’ve really only had a couple large-scale projects, and I’m pretty good about beating my head on something until I figure it out, and all the days where I’m “in the zone” more than make up for the days where I’m stuck.  But for those of you who are aspiring to be a professional software developer…. choose a path that allows for collaboration.  Google can only take you so far.  Plus….. Google isn’t going to check your code, perform extensive unit tests, or assist in debugging for you.

I read a very good post about this that I felt hit the nail on the head.  It’s ok to ask questions.  It’s ok to challenge others as well as yourself.  This doesn’t have to mean “face time”.  I personally, am a fairly social person; although I didn’t used to be.  So I fully understand that many programmers are introverts.  That being said, there are many tools for communication that allow you to collaborate without being face-to-face.  Web-meetings, instant messaging, e-mail, etc.  They all can be used for collaboration and many open-source projects accomplish exactly that on a global scale.

Collective knowledge is far better than trying to roll solo.