Just In Thought Tech, life, and random musings

Tip Of The Iceberg

Note: I started writing down some of my thoughts near the beginning of my co-op, before I got my blog setup. As such, the true date of the first few posts are going to be a bit off. I wrote this particular one around the first 3 weeks of my co-op, back in September. Already, it feels a bit premature, but for the sake of capturing the spirit of what I wrote, apart from some cleanup and re-organizing (and filling in empty bullet points about what I thought I was writing about), I’m leaving them mostly untouched.


Circa September 18, 2021

I’m three weeks into my co-op. If anything, I’m even more overwhelmed than when I started. I’m in a domain that’s truly novel to me. But I hope I can learn as much as I can. Already, there’s a couple of realizations I’ve come face to face with, that I’ve previously had a hard time really internalizing. These were things that I read about, and knew to expect. But as always, it was one thing to read about it. Another to experience it first hand.

I’d preface this with the caveat that this is my first co-op (and first software dev internship), and so a lot of my insights here might be enterprise-centric, and not as relevant to startups, or even developer positions at non-tech companies.

Really, I can sum up a lot of what I’ve seen so far in a single line:

coding is only the tip of the iceberg.

There’s so much more to software development than just the actual programming of the applications. One thing in particular I can already feel the difference in compared to school is the fact that software in the real world is a living product, that needs to be actively maintained. There’s all sorts of things to do with servers, app services, databases, logging, deploying, testing, etc. that you don’t really consider while in school. You know, the nitty-gritty stuff that you “don’t sweat”.

Also, most of the time, developers aren’t building a greenfield project, and developers are hired on to extend and maintain existing software. This has numerous implications for how the workflow changes. And as a result of this, business logic and domain knowledge at this level becomes increasingly important. It’s true that a competent developer can ramp up in any field. But to really excel, I think, a deep understanding and appreciation for business logic is needed. And it seems like the only feasibly way to acquire this in most cases is to let it arise naturally as you get acquainted with the systems you work in.

As it currently stands, all this really translates to for me is feeling extra useless, because not only do I have no idea what the code is doing (let alone the fact that I have yet to actually be proficient in any language of my team’s tech stack), the codebase is too large for me to grok in a short amount of time, nor do I have the context or business knowledge to orient myself faster.

Relatedly, this brings me to my second main thought of the day:

The rockstar developer exists, but not always in the form you might think

The notion of a rockstar developer is quite prevalent in the industry. But more than just coding, I’m seeing that what truly makes a developer effective is whether they can operate effectively within the space they’re in. Domain knowledge is critically important. But arguably just as important is being able to communicate effectively. Now, I’m not going to BS and say you need to have the people skills of a politician. Just being able to communicate in a professional capacity is sufficient. But the amount of interaction you run into as a developer is a lot more than you might expect. On a given day, you might interact with other database administrators, managers, developers, designers, and customers (with the number of people increasing as you move up the management chain, it seems). And more importantly, your ability to interact closely and consistently maintain clear and strong working relationships with your direct team members is crucial for maintaining productivity. Nobody works on products alone in software. It’s ironic that a profession that benefits so strongly from strong teamworking skills carries a public opinion conveying the exact opposite stereotype for developers.