I was recently invited to take part in a panel discussion at a coding bootcamp about lessons I’ve learned as a developer. I’m always surprised when I get asked to do this sort of thing because I know people with a much larger audience than I have and I’m used to them being the ones who get reached out to.
I do, however, enjoy doing this sort of thing. Partially because it’s nice to be able to possibly help other people, but also because I didn’t really have any role models or mentors in tech until I was in college or close to it, so being able to be that for someone else (even for just an hour or two) is something that I’ll almost always say yes to if I have the time (and I’ll generally try to make the time).
The organizer did a really great thing ahead of time and sent us a list of possible questions that we’d have. The panel was only about an hour, so we didn’t get to all of them, but I thought they were good questions so I’d like to answer them here.
I’d like to thank the folks who teach at and run Cincinnati’s Tech Elevator campus for inviting me, but most importantly, I’d like to thank the students there for not only listening to all of us waffle on, but also for asking such great questions at the end of the panel (and for connecting with us afterward).
How important are soft skills in a technology role? Which soft skills are the most important?
Soft skills is the wrong term, honestly. They’re core skills, and they’re frequently harder to acquire and grow than learning a programming language is.
You’re building things for people that solve problems. Communication, asking the right questions, and helping each other figure out a good solution to the problems is most of what we do.
Honestly, writing code is often the easier part of the exercise.
Don’t feel bad. It took me longer than I care to admit to come to that realization. In school, they teach you how to code. They don’t teach you what to code or why to do it (or, just as importantly, why not to do it).
What are the various job titles involved in a technology team? What other dev-related roles within a company should students be considering? How do those roles work together on projects or work?
Tech as a field is huge. Apart from developers, you have business analysts, testers, architects, infosec people in more varieties than you’d believe, scrum masters, product owners, project managers, and a whole host of others. Not all of them require writing code. All of them involve understanding people.
What is it like working for a startup versus corporate company versus mid-sized organization?
This is a really good question to which there isn’t a hard and fast answer. We’ll go with a few generalities instead. I’ll stick to what the jobs themselves are like because I could write a small book on the comparisons of culture, workload, etc.
Startups tend to be quite ad hoc with regard to who does what. You’ll find yourself doing a bit of everything. You end up wearing a metric ton of hats and learn a lot. Titles and responsibilities are often at least a bit fluid if not outright made up (especially in the early days of a startup).
Most of your time is going to be spent trying to find market fit with a product, or figuring out what product you should actually be making in the first place. Depending on the funding model (VC vs bootstrapped, etc), they may not be making a profit at this point.
Mid-sized orgs tend to have at least a bit more structure than startups. For example, your devs aren’t likely to do a lot of copy writing or marketing unless they’re giving presentations at conferences, sales meetings, etc.
They’ve probably already got at least one product or service that brings in money, and their cashflow is going to be net positive.
Large corporations really depend on what part of the corporation you work in – often all the way to the manager that you work for. They can honestly run the gamut from being like the Kafkaesque Big Cos that you see in the movies all the way to some teams operating in an extremely responsive and agile way.
What is the biggest misconception about being a developer?
That we’re antisocial people who sit hunched over a keyboard all day. The best developers that I know are warm, socially aware people who care not only about shipping well written code but about solving problems that matter to real people.
What is one thing you would have done differently in your career?
I’ll give you two things because I think they’re both important.
First, I would have focused on the people-oriented aspects of things much much sooner. More grace, less force as my old teacher would have likely put it.
Second, I’d have worked to realize that I don’t have to be perfect a lot sooner than I did.
Both of these things are harder for me than I would like because I grew up in an abusive environment where, among other things, anything less than perfect wasn’t “good enough.” It took me a long time to get to the point where I can at least shut up the voices of my parents that live in the back of my brain long enough to get things going – after that point, keeping momentum isn’t as difficult for me (thankfully).
How can students get involved in the local tech community? Examples: Meetups, networking, events, etc.
If you’re comfortable with going to things in person (since we’re still in the middle of a pandemic), go to user groups and meetups that interest you and go to conferences if you can afford to. Talk to people there. If you feel comfortable enough, offer to speak on something that you’ve learned.
If you’re looking to get involved online, there are a ton of discord chats out there in addition to twitter and LinkedIn. Connect with people, interact with them.
At the end of the day, you’re all people. Relax, take a breath, and be yourself.
Networking is literally just talking to people and getting to know them. Don’t go in with the expectation that they’re going to give you things. Sometimes you can help them. Sometimes they can help you. Sometimes you just talk. Sometimes you meet someone you don’t mesh with. This is all okay. These things take time. Don’t force it.
What is the hardest thing about being a developer?
The fact that, as you get more senior, the roles that you are expected to fill often involve less developing code and more mentoring people. They’re two very different skillsets and, sadly, most places don’t teach you how to do the mentoring part.
Some people resent that this is the case. Some welcome it. Either way, the truth is that as you go along, the biggest impact you will be able to make is to act as a force multiplier for others.
What type of person does it take to be a developer?
Do you write code? Go and look in the mirror. You are the type of person it takes to be a developer.
I’m being completely serious. You’re the type of person that you need to be, and don’t let people try to tell you that you aren’t good enough because that’s their own insecurities and not a shortcoming on your part.
What is the difference between an average developer and a really great developer?
We all have strengths and weaknesses. Most of the people you consider to be “great” developers are excelling at a particular class of problems that they have put a lot of time and effort into. Put them into other problem domains and they aren’t nearly as impressive.
On a team, you have a group of people that work together and have a complimentary set of skills, experience, etc. None of them are “great” by themselves.
Don’t get into the mindset that you have to be “great” (and I realize how difficult that is. Believe me).
In the end, the only person you’re competing with is yourself and your objective is just to improve over time. Whether you move forward a mile, a foot, or even just an inch, if you keep going you’ll make more progress than you ever believed is possible.
What advice would you give to someone just entering the field?
I’ll give you two pieces of advice. Both are important.
First, ask questions. You’re not going to know everything (no matter how long you are in the field). Asking questions doesn’t make you weak or a bad developer. People who tell you that it does are jerks and you’re better off not listening to them.
Speaking as someone who interviews people, being on the other side of the table sucks too, just for different reasons. We want the people we hire to succeed. We don’t hire you to watch you fail. If there are things that we can do to help you succeed, we’re probably going to do them, so if you have questions, please ask. You’ll not only be helping yourself; you’ll also be helping us.
Second, remember to take time for your life and the things that are important to you. At the end of the day, you can get another job. What you can’t get back is the time that you’ve spent or your health (and some companies will try to wring you out until there is nothing left if they think they can get away with it).
Don’t listen to the people who tell you that you have to work 80 hours a week in order to get ahead.
What do you look for in a team/organization that you are considering joining?
Work that I do not find morally objectionable, work-life balance, people that I think I can learn from, problems that I find interesting, no jerks, and decent compensation.
I’ve probably forgotten a number of things at the moment, but those are some of my key criteria.
What are your favorite tools/technologies/platforms to work with and why?
Honestly, at this point I view tools, technologies and platforms as a means to an end. I can learn pretty much any technology that you put in front of me, though I will admit that some are more painful than others.
I joke that I’ve brought down production in almost a dozen languages, but it’s kind of true. I’ve written everything from line of business apps for small and medium businesses to embedded software for really large farm equipment to security hardened web apps for the DoD to automation software for a Fortune 50 mega bank.
At the end of the day, tools are just tools. Expect Perl. No more Perl please.
What are your favorite projects to work on?
Things that have a positive impact on the world around me. They don’t have to be huge, amazing things, but knowing that I’ve been able to improve the lives of others is kind of a big deal for me.
What are your least favorite projects to work on?
I have three classes of project that could fall into this category:
Things that I’ve done countless times before – with the exception of where it helps make the world a better place.
Projects that don’t improve the lives of others but exist solely to make a profit (making a profit is fine, but some things exist for that purpose alone).
The last class of projects I actively refuse to work on if I have a choice – something that causes excessive harm in the world around me. I’ve turned down director+ level positions at companies that would have caused me not to be able to look at myself in the mirror.
I realize that all three of these are an exercise of privilege, but thankfully I usually have the ability to avoid them.
How can students best prepare for a technical interview?
I’m not sure that I’m the right person to answer this for dealing with the majority of technical interviews because the things I do on the other side of the table tend to be different than many/most people.
If you’re interviewing with me, it’s more likely to be a conversation. Things you’ve done, challenges you’ve faced, things you enjoy, what you want to do next, etc. I’ll dig into what you say to gauge where I think you are skills wise, but I don’t go in for the grilling style interviews.
I look for culture add instead of culture fit.
I’ve interviewed people at levels from fresh out of bootcamp all the way to very senior this way and it seems to work well for me.
What was the most important lesson that you have learned in your career?
That there is always another job. It’s not worth it to drive yourself into the ground over a job that, by definition, won’t love you back. Your time and health are things that you don’t get a second chance to have.
There can always be another place to work.