Hello, my name is Matt, and I was a solo programmer for five years.

That sounds like it ought to be the greatest thing in the world, if you take it at face value. As I am inclined to be an introvert, it sure sounded great to me. I didn't have to coordinate with anybody else, and nobody would rewrite my code when I wasn't looking. I could just sit up in an ivory tower, and only come down to visit the commoners when I was done. I would put my headphones on and my head down and just code.

What I discovered, though, was that the promise of the ivory tower was an elegant, infectious, lie.

The Construction

For three year-long internships and two full-time years, I worked in a management group in a large multinational. They had originally hired me to work as a gofer, fetching documents and filing papers. Eventually, when they discovered that I was majoring in computer systems engineering, they decided to have me build a web-based project estimation tool to replace the complex and fragile Excel spreadsheets they had been using for this purpose. This being my first job that actually involved programming for pay, I was quite excited to start my career.

This group I was assigned to work with was very non-technical. This is not to say they were bad at their jobs; in fact, the opposite was true. However, the most programming experience they had was writing simple C scripts, and I would be working in ASP.NET WebForms and C#. At first, this was positively exciting. It meant that, for once in my life, I got to be the expert at something. I was going to be the Web programming guy, and I was going to own it.

The first several months passed with no real problems. The tool I was developing was rather complex, and it took a little while to get all the rules worked out. But once they were, I got to code in earnest. I started developing with the enthusiasm of a dog chasing a bone, planning and writing and testing and refactoring to my heart's content, building the ivory tower to elegant heights.

Any problem I couldn't immediately solve, I turned to Google for help with. I can just Google for anything I need, I thought, my Google-fu is strong. At first, this was true: I could find many references on blogs and sites like StackOverflow for problems I was trying to solve. What's the click event for a TextBox? Google it! What are CSS files and what do they do? Google it! I was on a roll, searching and learning and writing everything I required. The now completed tower had come alive in my mind and was whispering in my ear, promising me that I could do anything, I didn't need help. For the longest time I listened and was enthralled.

But, inevitably, problems cropped up. Some of them I could fix with my meager skills, but some of them were much more difficult to solve.

The First Crack in the Tower

It didn't take long for me to run across something I'd never seen before:

string simpleText = otherText ?? "sample string";

What in the world was that double question mark thing?! I didn't have any inkling what that could be. My first instinct was to ask my teammates, as I knew I couldn't just Google for that symbol. But I was forcefully reminded that my teammates had no experience in ASP.NET or anything more modern than C. This meant that I really couldn't ask them any questions or get any feedback about my code. There was nothing they could do to help me.

Not to worry, I told myself, relying on the promises of the ivory tower, I'll find it. But I didn't have any idea how to go about doing that. I resorted to flailing around various search engines and forums like a headless chicken until stumbling over a StackOverflow post that mentioned something called the null-coalescing operator. Clicking on the link to MSDN was my eureka moment; I finally had the answer.

Finding that answer had taken two days. I didn't realize it at the time, but the lack of people who could read and understand and even improve my code was holding me back, forcing me to spend time frantically digging for a syntactical item that I could have learned in 30 seconds if only I'd had someone to ask. My faith in the ivory tower's assurances that I didn't need help had taken a hit, but I was still listening.

The Great Erosion

The app I was building was a fairly complex project estimation and quoting tool. The group I worked for needed to plan out how long many projects would take them so they could properly distribute tasks amongst the different engineers. This required me to deeply understand their project process and methods. Every month, we'd have demos that I would present to my boss and coworkers, and go over how the tool was progressing. Most of these demos went off without a hitch, but occasionally I'd discover a bug during a demo and have to immediately fix it. No big deal, just a little Googling, and I'll be done. But each time this happened, each time I had a question and wished I could just ask someone, it took a little bit of truth out of the tower's promises.

But the worst parts were when my boss's boss discovered a bug. Such an event invariably lead to him uttering the phrase, "It's wrong, just fix it!".

Since he had no modern programming experience, though, he could only tell me what was wrong and what should be happening instead, not how to actually accomplish it. So I trudged back to Google, trying to break down each piece of what he wanted into searchable elements, then finding possible solutions for each of those elements and attempting to glue them all together like some ersatz virtual puzzle.

I got really good at speaking Google's language. But speaking to Google, while interesting and valuable to know, left something out. I didn't really get to interact much with my teammates, and I missed speaking to people. This was an odd reaction for an introvert, but looking back at it now I realize I wasn't the aloof, "don't care what other people think" guy I thought I was. I needed to talk to other programmers at the same skill level as me, if only so they could validate that I wasn't crazy. I needed to feel like I was improving, and I couldn't do that if no one could understand where I had started from. The promises of the tower were now ringing hollow, and it was starting to erode away, leaving isolation in its wake.

The Crumbling of the Tower

It occurred to me that things like standards and architecture suddenly didn't matter at all; nobody that could see the code could say whether I was building this thing correctly. And so I let myself slip, did things half-assed and rushed, and then eventually gave up on those lofty ideals entirely. The code I was writing worked, but it was only maintainable by me, and that was fine because nobody else was going to work on this anyway.

But it bothered me. It bothered me in ways I couldn't describe at the time, and the people close to me noticed. My wife, in particular, noticed. I would come home from work thoroughly worn out, disgusted in the current state of affairs, and unwilling or unable to talk about my wants and needs with her. I couldn't articulate that I wasn't getting any feedback, didn't know if I was doing the right thing, and the uncertainty of it all stressed me out.

Partially because of that stress, I left that job to find a new one, one where I could work as part of a team. I had become deaf to the tower's promises, and it was now crumbling around me.

The Dust Settles

I write this post as a cautionary tale. Don't be enticed by the tower's promise of no oversight and no rules. It's amazing how liberating it sounds but how constricting it is; nobody to tell you what to do, but nobody to ask for help or give feedback. It only leads to isolation.

I'm never going to back to being a solo developer, high in an ivory tower. I need my teammates to talk to, to bounce ideas off of, to ask for help if I'm stuck. I now have a level of interaction with people, rather than just computers, that was totally missing. And now, finally, the imaginary tower has stopped its insidious whispering. It is now gone, dismantled by my experience, and my mission is now to make sure it never rises again.