Live data from Hacker News

Tell HN: The loneliness of a pretty good developer

news.ycombinator.com

361–370 of 519 posts

Re: Tell HN: The loneliness of a pretty good developer

#361
post #54

I am not a top developer or even close to it (I don't or want to have this trait of "relentless pursuit of self-improvement" ), but I have worked with a couple. It seems to me that being controlling is part of the problem. When I worked with a top developer, every and each code that I wrote they would have written it faster, more elegantly, more maintainable, and more bug-proof. But when they reviewed my PR, they wou…

This is an underrated answer. When your colleagues start treating you as the "go-to guy", I think it's often holding back their own development. Why should they try harder when they know your code review will catch everything they missed? Why bother volunteering for challenging tasks when they know you will do it faster? Often when you are put in the position of being the "go-to guy" at a company, you start to imagin…

> Your work is where you go to get paid. The end.

As I interpret this statement, it seems too narrow. It is one value judgment of how one person views work. It is not universal. I don't think this view is widely held in the software world, at least in the United States.

Re: Tell HN: The loneliness of a pretty good developer

#363
Hi, Shabang!

Good on you for asking this question. If you are looking for a sign that you are not conceited, asking “am I too conceited?” is a great first signal that you are not.

You ask how you can get feedback when you intimidate others with your success/output/influence. A very good question.

1. Be relentless in your admission of weakness. You see someone nodding at a half-formed idea as if it were genius “I’m sorry, I am barely making sense to myself here, I hope it's helping and I see you nodding along, if you're seeing something I am not seeing, great.”

2. Actively solicit. If someone else says your input was really helpful without feedback, “can I ask you for a favor? I'm trying to be more clear and succinct in how I communicate, and this looked kinda successful maybe, but was there anything I could have been more clear and succinct on, or any, like, important details I didn't really understand but just blew past?”

Some people on my team ask for approvals, “please approve my merge request.” I am always asking for feedback, “please tell me if anything looks unclear, if I need to comment something, whatever.”

After onboarding someone to a new system, “what was the hardest part of this to wrap your head around, is there a way for us to make it easier?” Or, “genuine question, if I asked you to just clean up tech debt on this repository for a month, where would you start?” ESPECIALLY do this with newbies. Someone who comes in as a blank slate has so much to give, the moment that they say “oh that surprises me, I would have thought we would have done this this way” you can rethink, “oh yeah why DON'T we do it that way?” and if you code it up and see no obvious reasons to do it the way you originally did it, you can ask them to rereview that code and you can ultimately merge it ... What an egoboost! Your newbie feels they delivered value from day 1, meanwhile you are seeing things from a different perspective.

3. When people are asking for your opinion, don't just give them one opinion. Even “Which would be better, A or B,” you can answer “well, I don't really understand the problem as well as you do, so I can't answer the question for you, I would choose A in situations that look like OPQ and I would choose B in situations that look like RST and for that matter I would choose C in situations like UVW and if it were a personal project or situation XYZ, I might just brute-force it with option D. But I don't know which of those trade-offs are the best in your case, your hunch is way better than any experience I have.”

Now to your other big question, you ask how to become less controlling and less frustrated with others. Two tips there.

1. Let it f**ing go. Seriously. 90% of these decisions are not important enough to justify blocking merge and release. They didn't insert a null check in a place where it comes automatic to you—so what? Here's the deal, learning is pain, more accurately learning is the relief that comes after feeling a pain over and over. Your desire that this other person never feel pain is this a desire that they not learn. You need to have the attitude of, “if I am wrong then I have learned something, if I am right then we can fix it later.” Just let the damn thing go, and your subordinates will learn and skin their knees and delete the prod database and grow.

2. Often people become 10x developers in a certain context because that context is full of landmines which they are able to avoid. The other people in that context are running into them and dying. But, you can find yourself in a rut.

Next time you are brushing your teeth, take note of what side you normally start on. Start on the opposite side. It's weird, uncomfortable, but not wrong. Next time you find yourself building code, maybe you start from a function that you're pretty sure you will need, start with some small examples, build out, eventually the larger structure will crystallize in your head? If that's you, reverse it. Pretend that you have an AI bot that, just by naming a function, will properly implement it for you, and start from the outside and build your way down to the details and the nitty gritty. Or if you program outside-in, flip this advice and program from the inside out.

You KNOW there is more than one way to do it, you are a smart person, obviously. But you have to FEEL that there is more than one way to do it, that is harder & needs to be drilled and trained.

3. Invest your surplus. You are 71% of the story points vs 9 others, correct me if I am wrong but that makes you a 22x developer. You commit to investing 20% of that and you become an 18x developer, nobody is going to complain. 2 hours a day or one day a week, however you can arrange it. What do you do with that time? Many options.

Maybe you mentor others on your team. “Oh Shabang, I can't take up your time, your time is very valuable.” NO! There is literally nothing more valuable that I can be doing than making you more productive. Because that's linear versus quadratic growth. Actually if I can get you trading the next generation too, it's exponential growth. It doesn't matter what the coefficient is, quadratic beats out linear eventually.

But you have indicated that you are not so interested in the management track and that is totally fine, you should be able to remain an individual programmer without needing to become a manager in order to get ahead. So what does that look like? One way: You invest in a new technology. Say you decide to do machine learning, you go learn some PyTorch, you build some models and train them, see if you can't apply it to some random problems at work. Another way, favored by the late Joe Armstrong, you invest the 20% in rewriting. You deliberately take 25% of your remaining story point load and nominate things to be implemented twice. You build it once and learn the shape of the problem and then you build it again. Can be combined with the previous idea, you decide to learn functional reactive programming or μKanren or Rust or what have you, by taking 10% of your story points and reimplementing them in those styles, assuming that you need to spend at least as long as the original bug just understanding what the new idioms are.

The goal here is to get to the point where, if someone else has a novel approach, you are no longer saying no to them, rather you are coming up the next day and saying, “hey that sounded really interesting, I wrote this proof of concept, is that what you were going for?”...

The golden rule of standup comedy, you never say “no,” you say “yes, and.” when someone says “We will just leave the authentication token off of that endpoint,” you suppress your sense of saying “no, every endpoint needs authentication, don't be ridiculous” but instead try to see their needs and say “yes, and we can build a way to instead authenticate by cookie/track the requests some other way/automatically audit accesses and limit the rate at which they are provided so it's not useful unless you know exactly what you're are doing/whatever.”

Hope thpse bits of advice help?

Re: Tell HN: The loneliness of a pretty good developer

#364
Hi, Shabang!

Good on you for asking this question. If you are looking for a sign that you are not conceited, asking “am I too conceited?” is a great first signal that you are not.

You ask how you can get feedback when you intimidate others with your success/output/influence. A very good question.

1. Be relentless in your admission of weakness. You see someone nodding at a half-formed idea as if it were genius “I’m sorry, I am barely making sense to myself here, I hope it's helping and I see you nodding along, if you're seeing something I am not seeing, great.”

2. Actively solicit. If someone else says your input was really helpful without feedback, “can I ask you for a favor? I'm trying to be more clear and succinct in how I communicate, and this looked kinda successful maybe, but was there anything I could have been more clear and succinct on, or any, like, important details I didn't really understand but just blew past?”

Some people on my team ask for approvals, “please approve my merge request.” I am always asking for feedback, “please tell me if anything looks unclear, if I need to comment something, whatever.”

After onboarding someone to a new system, “what was the hardest part of this to wrap your head around, is there a way for us to make it easier?” Or, “genuine question, if I asked you to just clean up tech debt on this repository for a month, where would you start?” ESPECIALLY do this with newbies. Someone who comes in as a blank slate has so much to give, the moment that they say “oh that surprises me, I would have thought we would have done this this way” you can rethink, “oh yeah why DON'T we do it that way?” and if you code it up and see no obvious reasons to do it the way you originally did it, you can ask them to rereview that code and you can ultimately merge it ... What an egoboost! Your newbie feels they delivered value from day 1, meanwhile you are seeing things from a different perspective.

3. When people are asking for your opinion, don't just give them one opinion. Even “Which would be better, A or B,” you can answer “well, I don't really understand the problem as well as you do, so I can't answer the question for you, I would choose A in situations that look like OPQ and I would choose B in situations that look like RST and for that matter I would choose C in situations like UVW and if it were a personal project or situation XYZ, I might just brute-force it with option D. But I don't know which of those trade-offs are the best in your case, your hunch is way better than any experience I have.”

Now to your other big question, you ask how to become less controlling and less frustrated with others. Two tips there.

1. Let it f**ing go. Seriously. 90% of these decisions are not important enough to justify blocking merge and release. They didn't insert a null check in a place where it comes automatic to you—so what? Here's the deal, learning is pain, more accurately learning is the relief that comes after feeling a pain over and over. Your desire that this other person never feel pain is this a desire that they not learn. You need to have the attitude of, “if I am wrong then I have learned something, if I am right then we can fix it later.” Just let the damn thing go, and your subordinates will learn and skin their knees and delete the prod database and grow.

2. Often people become 10x developers in a certain context because that context is full of landmines which they are able to avoid. The other people in that context are running into them and dying. But, you can find yourself in a rut.

Next time you are brushing your teeth, take note of what side you normally start on. Start on the opposite side. It's weird, uncomfortable, but not wrong. Next time you find yourself building code, maybe you start from a function that you're pretty sure you will need, start with some small examples, build out, eventually the larger structure will crystallize in your head? If that's you, reverse it. Pretend that you have an AI bot that, just by naming a function, will properly implement it for you, and start from the outside and build your way down to the details and the nitty gritty. Or if you program outside-in, flip this advice and program from the inside out.

You KNOW there is more than one way to do it, you are a smart person, obviously. But you have to FEEL that there is more than one way to do it, that is harder & needs to be drilled and trained.

3. Invest your surplus. You are 71% of the story points vs 9 others, correct me if I am wrong but that makes you a 22x developer. You commit to investing 20% of that and you become an 18x developer, nobody is going to complain. 2 hours a day or one day a week, however you can arrange it. What do you do with that time? Many options.

Maybe you mentor others on your team. “Oh Shabang, I can't take up your time, your time is very valuable.” NO! There is literally nothing more valuable that I can be doing than making you more productive. Because that's linear versus quadratic growth. Actually if I can get you trading the next generation too, it's exponential growth. It doesn't matter what the coefficient is, quadratic beats out linear eventually.

But you have indicated that you are not so interested in the management track and that is totally fine, you should be able to remain an individual programmer without needing to become a manager in order to get ahead. So what does that look like? One way: You invest in a new technology. Say you decide to do machine learning, you go learn some PyTorch, you build some models and train them, see if you can't apply it to some random problems at work. Another way, favored by the late Joe Armstrong, you invest the 20% in rewriting. You deliberately take 25% of your remaining story point load and nominate things to be implemented twice. You build it once and learn the shape of the problem and then you build it again. Can be combined with the previous idea, you decide to learn functional reactive programming or μKanren or Rust or what have you, by taking 10% of your story points and reimplementing them in those styles, assuming that you need to spend at least as long as the original bug just understanding what the new idioms are.

The goal here is to get to the point where, if someone else has a novel approach, you are no longer saying no to them, rather you are coming up the next day and saying, “hey that sounded really interesting, I wrote this proof of concept, is that what you were going for?”...

The golden rule of standup comedy, you never say “no,” you say “yes, and.” when someone says “We will just leave the authentication token off of that endpoint,” you suppress your sense of saying “no, every endpoint needs authentication, don't be ridiculous” but instead try to see their needs and say “yes, and we can build a way to instead authenticate by cookie/track the requests some other way/automatically audit accesses and limit the rate at which they are provided so it's not useful unless you know exactly what you're are doing/whatever.”

Hope those bits of advice help?

Re: Tell HN: The loneliness of a pretty good developer

#365
post #54

I am not a top developer or even close to it (I don't or want to have this trait of "relentless pursuit of self-improvement" ), but I have worked with a couple. It seems to me that being controlling is part of the problem. When I worked with a top developer, every and each code that I wrote they would have written it faster, more elegantly, more maintainable, and more bug-proof. But when they reviewed my PR, they wou…

This is an underrated answer. When your colleagues start treating you as the "go-to guy", I think it's often holding back their own development. Why should they try harder when they know your code review will catch everything they missed? Why bother volunteering for challenging tasks when they know you will do it faster? Often when you are put in the position of being the "go-to guy" at a company, you start to imagin…

> Unless you are literally being paid 10x what your colleagues are being paid, from the company's perspective you are not a 10x developer.

First, the usual accepted definition of a 10x developer is not about pay; it is about value added. Second, it is well-known that market pay is not necessarily linearly related to value added.

Re: Tell HN: The loneliness of a pretty good developer

#366
Time to find a new gig.

Starting fresh somewhere else with no reputation, no karma, and the potential for being the small fish again will pay dividends.

At the very least, different social and organizational challenges may exist there and allow you to grow in a different light.

(also, be sure your enjoying non work-related hobbies and adventures as much as you can. Life isn't just work)

Re: Tell HN: The loneliness of a pretty good developer

#367
post #134

Earlier quoted context omitted.

Eh, that is exactly what I don't want. Pretending I am this amazingly productive developer and my code is just trash. I just checked. In 2021, only two defects were created against my specific code changes. If I had to home into a weakness of mine is that sometimes I solve today's problem well, but don't think extensively about how tomorrow's problem in that space might look like. The struggle is between creating sim…

It's not about behavioural defects. It's that the _code_ is trash. It is unmaintainable and slows down all future changes, exactly because the person who wrote it didn't take the time to think about the future or even good architecture in the present. Every time I touch their code I have to almost redo their work because: - It's impossible to understand what is going on (For example when people load huge json or sql…

Seen the same thing happen with devs that proud themself to write “simple” code. Sure, every individual script they write is simple in itself, but in the end you have thousands of them that don’t compose or reuse at all, with lots of implicit dependencies and assumptions between them. Leaving the rest of the team slowed down, trying to make sense of it, careful not to add even more to the existing mess, while mr “pragmatic” keeps adding even more copy-paste. Basically the total complexity becomes bigger than the sum of its parts.

What you bring up is a common and concerning scenario. It would be better received without the accusatory tone, until you know more about actual situation. There are many good and fast developers that don’t apply to this concern.

Re: Tell HN: The loneliness of a pretty good developer

#368
I've been trying to find answers for the last few months to the same questions you are asking. I could have written 95% of what you just wrote.

I won't try to prove my status as a 10xer beyond that as an IC in the last two years, my company and its customers have nine figures more in their pockets because of stuff I've written. As a result my compensation is in the band for a Google L8.

It's completely clear to me, particularly from your replies, you are an exceptional developer.

My frustrations and fears are *exactly* the same as yours.

I don't have answers for you. I'm right there too. All I can do is confirm that you aren't crazy, you aren't alone.

The only helpful? thing I've found so far is to make my circle of caring smaller. I've chosen half the company's codebase to strenuously avoid knowing anything about. I focus on one important problem or important code review at a time, and try to do an excellent job at it at the pace that it requires, and in spite of the dozen other critical issues or urgently needed code reviews, that are around me.

Re: Tell HN: The loneliness of a pretty good developer

#369
post #54

I am not a top developer or even close to it (I don't or want to have this trait of "relentless pursuit of self-improvement" ), but I have worked with a couple. It seems to me that being controlling is part of the problem. When I worked with a top developer, every and each code that I wrote they would have written it faster, more elegantly, more maintainable, and more bug-proof. But when they reviewed my PR, they wou…

This is an underrated answer. When your colleagues start treating you as the "go-to guy", I think it's often holding back their own development. Why should they try harder when they know your code review will catch everything they missed? Why bother volunteering for challenging tasks when they know you will do it faster? Often when you are put in the position of being the "go-to guy" at a company, you start to imagin…

> They value you exactly as much as they're paying you, no more.

Define "they".

It is sometimes useful to think of an organization as one actor, but this simplification can break down. For example, a great developer may get noticed and recognized by her manager, but said manager may have a difficult time making the case to bump her pay due to organizational dynamics and policies.

My point: different parts of the organization may value you differently, each with different abilities to 'compensate' you, whether it be pay, benefits, project flexibility, work-life balance, skunk works, or the option to not be anywhere near Chris.

(No offense to people named Chris intended. Unless, well, you are that Chris.)

Re: Tell HN: The loneliness of a pretty good developer

#370

Work somewhere with really, really smart people. When I joined Stripe in 2017, I couldn't get over the number of people I worked with who were smarter, better engineers than myself. It was new to me. It was hard at times (impostor syndrome, feeling like an idiot, etc), but mostly super fun – and of course, incredibly humbling. Humility is really important to me, and it sounds like it is to you, too – you can gain it,…

I'm not dismissing the comment above -- it is useful -- but it leaves a lot of fundamental questions unanswered, such as:

Which kind(s) of smart people? The kinds of smarts that are like yours? What about the forms of intelligence maybe that you don't even recognize yet? What about pairwise intelligence -- that isn't traditionally captured by the term 'smart' -- it is more often captured by quotes such as "he's inspiring to work alongside" or "she teaches me without talking down to me" or "he can herd cats to push a wet rope up a hill and get the product delivered on time".

One takeaway: optimizing for "smart people" is underspecified.

Another: there are many other worthwhile things to optimize for besides one kind of intelligence -- or even one fixed blend of intelligences.

Post reply on HN