Surprises as a Software Developer

When I started programming, I never imagined that the most effort wouldn't be spending hours learning something new, keeping up with the latest algorithms, learning new languages, or even staying on top of the field. Since my induction into the industry, most of my problems have been with keeping up with communication, with inherited choices, arbitrary deadlines, obscure business knowledge, and most everything except the tech. Which isn't to say the tech isn't important, I've just had more to learn outside of that.

Archaeology

  • I never imagined that my jobs would be more similar to archaeology than to hackerrank. I've spent countless hours churning through the code of previous generations of employees. I've uncovered patterns in the code and thought "I date this workaround as 2004 by the second generation of software developers here", just as an archaeologist would find some clay pot and deduce "these people hadn't discovered indoor plumbing yet."
  • I never imagined that half my waking hours would be spent listening to passionate discussions about scrum and agile and even just how to work with other people most effectively.
  • I never imagined that marketing is more important to success than a polished product. In fact, a product doesn't even have to be working to win the market, if the marketing is good enough.
  • I never imagined that a primary concern is maintaining the same user experience, whether it's a good experience or not, it's what the users are used to.
  • I never imagined that susceptibility to social engineering and a lack of security principles is so common.
  • I never imagined that the most effective form of security is employees concerned about job security and unwilling to give up information or power. No one can break that impenetrable wall.
  • I never imagined that interviewing was so hard. I'm terrible at it and I mess up all the time in them. I forget things I knew or accidentally contradict myself or feel intimidated by their fancy sales pitches for what the employer does.
  • I never imagined that there wasn't one best way to write software. I hear about "best practices" all the time, and yet, most of the time it just turns out to be "that's how I did it at my last job". If the best practice can't be defended about why, I tend to assume that the best practice was just made up on the spot.
  • I may have imagined, but not understood, that reputation is extremely important. My local market is fairly small and word-of-mouth friend-of-a-friend can't be ignored.
  • I understood but I didn't know how to deal with or balance that software development can be all hours of the day. Just because I've logged off work computer doesn't mean I've stopped thinking about what I was working on. Staying late working on something is very rarely the answer. Just let it stew in the back of your mind, and go live your life.
  • I did not understand that business/domain knowledge is as important as technical knowledge.
  • I thought that there would be an objective set of requirements to determine who the best programmer is, and whether someone is junior/mid/senior/arbitrary title. This was a particularly hilariously wrong view.
  • I didn't understand that a better team building strategy is more akin to Moneyball: finding consistently valuable people for a good price, rather than absolute rockstars.
  • I didn't understand that the rockstar mentality was a bad thing: it's what all the most exciting job listings talked about when I entered the market.
  • I never imagined that 95% of all coding proficiency tests given out, are merely a test of how much of the standard library I have memorized.

Summary

Life as a software developer is awesome.