Category Archives: Software Jobs

Do Software Developers Need a Brand?

When someone hears that you are working on something, your brand is what they think will happen. So, the question isn’t whether or not you need a brand, because you already have one as long as people hold some opinion of your work. The questions to ask are (1) what is the brand, (2) how consistent is it, and (3) how widespread is it.

The most important thing is that the opinion people have about you is generally positive, but there are a lot of options for what that is. It could be that people generally believe you are highly skilled. Or they could believe that adding you to a team is good because you help teams jell. Or perhaps adding you to a startup is a good idea because you have a large network of peers to recruit from who like to work with you. Or maybe you know a domain on a deep level. Each of these are examples of a positive brand, and they all can work well (or even better in combination). Whatever your brand is, it is built from your visible accomplishments.

So, in addition to accomplishing things, if you want those things to be part of your brand, make them visible. If the work can’t be public, then you could still make sure your team understands your contribution, ensure your manager understands it enough to use in a promotion packet, or talk about it on an internal blog. If the work is public, then having some public explanation of the benefits of that work is worth adding to it. If you use LinkedIn, I would say that this should show up in your headline, summary, and job history section. There is no need to make posts for this, but I do think having a trickle of LinkedIn activity is helpful to help people remember you or get them to look at your profile.

A positive brand is always helpful, but a consistent one becomes more important as your career progresses. You can’t always control exactly what you work on, but you can improve how that work is understood by using emphasis. I have done this on my LinkedIn profile and when applying for a job by making custom resumés and cover letters.

For most of my career, I concentrated on doing good work and having positive interactions. But it’s easier to communicate this by fitting that work into a narrative. I emphasize the parts of my career that are more likely to result in relevant work, and I expand it in direct conversation if it makes sense.

I’d like to think that this was all intentional, but it wasn’t really. This narrative is something I found after the fact. There are alternative brands that I could use, but don’t, like “FinTech Engineer” or “Mobile Engineer”, which are positive but not consistent with what I am trying to do. I don’t want to be hired to do those things, so it’s only important to talk about them if a specific engagement needs that in addition to what I try to sell. But, to get the job at Trello ten years ago, I emphasized the “Mobile Engineer” and “Startup early engineer” narrative and downplayed my management experience.

But when developers ask whether or not they need a brand, I think they are mostly asking about the “widespread” part. In that case, the answer is easy. No. You do not need a widespread brand. My career has been successful without one, and I think I’m the norm.

I am not well-known outside of my network. This is true even though I have written a book, spoken at conferences, been on some podcasts, written for tech publications, and worked on a fairly well-known app. To the extent that these things touched people outside of my network, I don’t think it resulted in a widespread brand. But, I do think the people that know me have a positive association with me in a way that is consistent with my narrative.

The more important thing is that your positive and consistent brand be widespread within your communities: inside your current employer, among your ex-colleagues, and among your clients. If you participate in developer online communities, then in there too. To the extent you are on social media, then among your followers, no matter how small a list that is.

Rather than working to grow your brand to strangers, I would first recommend you grow it within your network. The best way to do this is by doing good work in the way you want to be known. Then, build a consistent and widespread brand by tying it into the narrative you want people to have about you when they hear your name.

How to be avoid being replaced by AI

Right now, I am an independent software developer, and so I own all of the code I create. So, of course, I want it to be as efficient as possible to write that code, and I use AI to do that. I get all of the benefit. I am not replaced—I am freed up to do other things.

All of my consulting income comes from work that originated from my network, cultivated from over 30 years of delivering on my commitments. Some of it is because I am one of only of few people that understand a codebase (that I helped create and partially own). There are very few people that could replace me in this work, even with AI. Even if AI were able to 100% reproduce everything I say and write, the client wouldn’t know how to judge it because their judgement of me is almost entirely based on past experience.

It’s not just AI—there are many people who are smarter than me, with more experience, who work harder, and have better judgement. But if they are completely unknown to my clients, they couldn’t replace me.

Of course, I realize that this isn’t something that one could just replicate immediately, but if you are building a software engineering career for the next few decades, I recommend cultivating a network that trusts you based on your past performance and owning as much of your own work as possible. When you do that, all of the benefits of efficiency flow to you.

Network with Alums Just Ahead of You

Yesterday, I wrote about using your alumni network to make you more lucky. In most of my stories, the alumni network that was most helpful were in my year or just a bit older. They are the ones that just got a job and know what works in the current job market. They are also the most like you, so their advice is relevant. And, they know you, and like you, and so they will want to help you.

When I talk to my mentees, I keep warning them that my information is way out of date. I got my first job by looking in the classified ads in a newspaper. That ad led to a recruiter that placed junior software developers. Those parts of my story are from olden times.

But, networking with your college classmates is evergreen. The easiest way to do this is to just be a good classmate, study partner, and extra diligent when working in groups.

Alumni Networks Increase Your Luck Surface Area

When I walked into the second interview at my first job, one of the developers said: “Hi, I think you know my husband.” It turned out that her husband was a college classmate of mine. I didn’t get the lead from him (that would have been smart of me), but at least he must have said nice things when she asked (or I’m guessing I wouldn’t have been hired). It was pure luck, but I’m a big believer that Randomness is the Great Creator.

The woman who would become my wife started at that same company two years later. She was smart enough to get a referral from her alumni network, who had also gotten the job through an alum connection from a third person who had worked her alumni network to get the job through the wife of one of our executives. It was a triple-bank shot, with absolutely no chance of working, but without it, I would never have met my wife.

My luck continued. At my next job, I helped find one of our early customers, who was a prominent alum I had met because he hired a few of my friends (fellow alums of both of us). The work we did for them eventually led to a patent and getting VC money to pivot to a startup. This was more than 25 years ago, and I am still on the board and participating in their successes. More than 90% of my 2024 income came from connections I made there.

From the outside, it looks like randomness, and it is, but there are things you can do to move the odds, and networking with alums is an easy one.

Apples and Oranges are (Relatively) Easy to Compare

I don’t like stack ranking because it’s hard to compare people into a rank ordering.

One of the most surprising things I learned in math was that complex numbers had no natural ordering. Meaning, less-than and greater-than are not defined for complex numbers. It makes sense when you think of it for a minute. The same applies to other multi-dimensional things like matrices and vectors.

So, why do we think we can rank order people? I’m specifically talking about companies that do this for their employees, but it comes up in other contexts (e.g. class rank).

People are hard to compare, but when we say that it’s like comparing apples and oranges, I disagree. Apples and oranges are both fruit, they both have around the same number of calories, they are about the same size, shape, and cost. They are easy to turn into snackable pieces (slices or segments). Even for me personally, I like them both about the same. On a lot of dimensions, they are about the same. When that’s true, the comparison might turn into just a single dimension where they vary more—maybe only in specific situations.

For me, the main way they are different is in how they travel. Eating an orange is more of a mess and harder to deal with outside of my kitchen. I’m much more likely to grab an apple to throw in my hiking bag or take to the beach. Another way is in recipes. I know a lot more apple desserts than orange ones. It stands up to baking better.

But, how about apples and raisins, or apples and candy, or apples and tempeh, or apples and bicycles. Those are harder to compare because they vary on more dimensions. In the bicycle case, they don’t even share dimensions except generic ones—they are both objects that have size and weight.

Getting back to stack ranking (which I still don’t like). Inside of a team it makes no sense to me. You would have a mix of levels and experience. That mix makes the team valuable, and arbitrarily favoring a dimension hurts the mix.

Like comparing apples and oranges (which is easy), it would work better if you could remove dimensions and only compare one or two. So, for example: compare just your backend senior developers with each other on just system design skill. You could reduce the set to just those with two years at this level. This might be useful when considering a promotion. In this situation, you might value mentoring and consensus building skills more than in-depth knowledge of TypeScript. So, it’s situational (like which fruit to use for a pie) and has reduced dimensions. Another advantage is that you don’t need a full ordering to complete the task.

Leet Code at Work

I prefer work simulation questions to leet code questions for tech interviews. I like to ask interviewees to write code that is similar to what we actually did was better than, for example, finding a successor node in a BST. At Trello, our tech interview would have you refactoring code in a way that is very common in iOS or implementing a UI from a spec. At Atalasoft, we had a lot of image processing algorithms in our code base, so I wanted to see you do something simple with pixels.

The other day I was thinking about my career and trying to remember if I ever did have to code a custom algorithm given a specification, and I did come up with a few examples. I’ve written before that my career happened to have a lot of math in it, and those same jobs sometimes also needed me to implement algorithms.

But more often, I chose algorithms (or knew that I needed to). I think that’s a more universally useful skill. It’s often the case that something just isn’t fast enough. A lot of published and common implementations of algorithms work well for the general case, but you may be able to make some assumptions in your specific application that allow you to do something better. Or your particular workloads might make a different set of trade-offs more appropriate.

To do this, it’s good to have broad knowledge of a bunch of choices, just so you know what techniques might be possible. These days, I think AI can help you a lot with this, but it helps to know what to ask for and when to ask for it.

Why LinkedIn Works For Me

With all the talk of migrating to either Bluesky, Mastodon, or Threads, I’m happy that I “migrated” to LinkedIn two years ago.

I joined LinkedIn in 2003, but it was mostly a place to keep my resume for job searching and to message former co-workers.

But, now I use it more like a combination of a social network where I want to stay connected to real-life colleagues and a place to try to get business by networking with potential clients.

My goals with LinkedIn are:

  1. I want to be ambiently aware of which of my ex-colleagues might be looking for jobs and which might be hiring, so I can introduce them to each other. LinkedIn (for whatever flaws it might have) is the best way I have found to do that.
  2. For my business, I want to reach software developers when they are thinking about work and career growth. I want to reach software company tech leaders when they are having problems that I might be able to solve. That happens on LinkedIn and not many other places.

To do those things, LinkedIn has several advantages over other social networks for me:

  1. I see no political content or ads. I checked the box in Settings to turn off political content, and that’s been effective.
  2. LinkedIn shows a normal, time-based (non-algorithmic) feed if you request it in Settings, and it stays that way.
  3. People here seem to be real, not bots. If someone auto-posts their work’s content or is posting a lot that I don’t want to see, I unfollow them, unless I know them well.
  4. Comments on my posts, even by strangers, are civil. Generally, people are positive and casually professional.
  5. My ex-colleagues are here in large numbers, and mostly they talk about work/career things.
  6. There aren’t a lot of posts, and almost every one of them is an update from someone I care about talking about what’s going on in their career. When I read them, I don’t think of myself as doom scrolling — it’s the opposite: it sparks joy to see my friends succeeding.

Twitter was never any of those for me, and so it was easy to give up. It didn’t help me accomplish my goals for using a social network, but worse, it was addictive and a waste of time, so I had to block it. I’m sure Bluesky and Threads are a better Twitter, but I doubt they are a better LinkedIn for how I use it, and as bad as Twitter in all the ways that matter to me.

Not Rejected, Just Not Picked

When I was interviewing software developers in the 1990’s, it was very common that people would apply that could not code at all. I don’t think they were nervous or that the question was unreasonable. We were a C shop and the question I opened with was in K&R and just a simple question about arrays. Many candidates could not give any answer. I wasn’t the only one seeing this, which is why FizzBuzz was created.

These days, I hardly ever see that. Nearly everyone I interview can code and can answer the simple questions. Many can answer any reasonable question. This means that we often had more than one good candidate.

But we still had only one job.

The problem is similar to what I wrote yesterday about layoffs. You might need to layoff a person you would hire if you had the budget. In both cases, that person is not really rejected, they just didn’t get picked from (what was probably) multiple good options.

Hype and Career Bets

My professional career started in 1992. Since then, there have been a lot of hyped technologies, but I only really have acted on very few of them. Most of them, I let go by without taking much action.

I only took big career bets on the web and smart phones. Before I learned how to program for them, I used them every day. Then, I taught myself how to develop for them and changed jobs to do it full-time. In both cases, going from a place where I was very comfortable to a startup.

I passed on nearly everything else: social media, web3, blockchain, big data, ML, functional programming, NoSQL, cloud infrastructure, VR/AR—I know them “enough”, but they were not big factors in my career. Partly it was because I was still benefitting from being an expert, but mostly because I wasn’t personally excited by them as a user or as a software product maker.

I’m thinking about this, because we’re in an LLM hype cycle now. I use products based on it nearly every day. I feel like I did when I used the web and smart phones. I’m getting a lot of value and I want to know how to make things for it.

Knowing What You Don’t Want

When I wrote that I think job seekers should write a job statement to help narrow your search, I listed twelve ideas for what to put in it. Many of the ideas are either/or type questions about company size, industry and so on. What I didn’t consider in that post is how useful it might be to just rule things out.

After working in IT for a non-profit for two years, I realized that I only want to drive revenue, not cost reduction. I also decided many years ago not to work in AdTech or Social Media. I now think of my job statement as being a positive statement about only working in B2B SaaS, but it took me a while to narrow down to that.

Ruling things out helped me get there eventually.