Back

Doing too much work on one's own before looping in others

591 points2 yearsthezbook.com
gorjusborg2 years ago
Trasmatta2 years ago

I'm good at working on a team and looping in others. I also find it to be one of the most exhausting parts of software development. It's so difficult to constantly need to get feedback and buy-in from other people, and takes away a lot of the creativity and joy in programming (for me).

Which isn't to say you shouldn't do it, just that it's one of the things that makes me dislike working on a team. I actually think this may be one of the factors in burnout for a lot of developers. Writing code as a team is almost like writing a novel with a few dozen other people, all of which have differing ideas on how the book should be written, or even what it should be about. It's hard to feel the joy in creating something when you're only a small cog in the development machine, and every decision needs a dozen voices of input.

It's disempowering to feel like you're never able to make a decision yourself, despite supposedly being hired for your expertise in the field.

> Always encourage engineers to show their work as quickly as possible – an engineer on a project should never go more than a week without showing something, and usually it should be more like a day.

"usually it should be more like a day" is bad advice in my opinion, and a likely source of micro management. Let professionals do their work.

n0w2 years ago

> Writing code as a team is almost like writing a novel with a few dozen other people, all of which have differing ideas on how the book should be written, or even what it should be about. It's hard to feel the joy in creating something when you're only a small cog in the development machine, and every decision needs a dozen voices of input.

This resonates with me. I think we do our best work when we have the autonomy to apply our expertise.

But at the end of the day, you're not the only one writing that novel. If you have an idea of where the plot is going but your teammates think it's heading somewhere else, it's going to be very problematic.

The other problem is that you _will_ make mistakes. Some could be avoided by leveraging the experience of your teammates. You also won't always strictly have the best ideas. Brainstorming as a group can be a lot more effective than sitting alone for a long time thinking hard about a problem (but also sometimes hard problems need a lot of individual thought).

I suppose my point is that I'm not sure where the happy medium is? I've been on both sides of the "engineer working too long alone before sharing" problem and I think it sucks.

How do we enable engineers to do their best work but also allow our teams to be successful?

strictfp2 years ago

You can just let some people make mistakes, and give them feedback on it for next time. That way, you get autonomy and eventually mastery.

We don't all have to agree on everything. I think that's a fallacy.

comp_throw72 years ago

The idea that people will better learn from spending several weeks doing something useless (i.e. unnecessary design) instead of having that headed off at the pass is silly, when the specific thing they should be learning is to _not spend several weeks working on something without feedback_.

docmars2 years ago

What if more could be learned / gained from several days or weeks of mistakes in the grander scheme?

I can't tell you how many times I've had to throw out code or designs from longer explorations, but the things I learned in getting there, for the sake of technical purposes, or heck, new ideas I could apply elsewhere in the future, were entirely worth the trouble. This is a pretty fundamental part of increasing skill — to be forced to struggle on one's own, especially if that person's personality is suited to the solitude needed to solve a problem.

Obviously it's smart to avoid larger mistakes or going in the wrong direction for the sake of the product and delivery timelines, but I think it's more realistic to expect these longer adventures to happen, and that an element of trust is necessary to allow that person to not only solve the problem, but grow in that journey.

js82 years ago

I don't think that's what GP was suggesting at all.. everyone in the thread agrees that feedback is good.

However, the opposite extreme, spending time in meetings where lot of good ideas get proposed but most of them get killed, because somebody doesn't like a detail, or nobody champions them strongly enough, is not a good learning experience either.

Kaze4042 years ago

> It's disempowering to feel like you're never able to make a decision yourself, despite supposedly being hired for your expertise in the field.

I'm going through exactly this at the moment. For reasons HN will probably consider fiction, my superiors have started treating me as a toddler that needs oversight on every single decision that needs to be made.

It's something I've been dealing with in therapy, and the way I was able to explain it to her was by saying that I feel like the monkey in the infinite monkey theorem. Never thinking about what you're producing (if you can call it producing at all), just pressing buttons.

It makes me wonder what the point of having me even is, considering they spend so much time solving all my problems for me. I've come really close to saying "ok, go ahead and let me know when it's done" during 40 minute meetings where every minute detail of what I'm supposed to do is discussed by 3 people.

Trasmatta2 years ago

I feel this deeply. I had an extremely similar situation at my last job. My current job is quite a bit better at least, but I still deal with it here.

I guess there's a reason the phrase "code monkey" exists. Jonathan Coulton said it pretty well:

Code Monkey have boring meeting

With boring manager Rob

Rob say Code Monkey very diligent

But his output stink

His code not “functional” or “elegant”

What do Code Monkey think?

Code Monkey think maybe manager want to write god damned login page himself

https://www.youtube.com/watch?v=AEBld6I_AKs

burntoutfire2 years ago

I personally much prefer this version:

https://www.youtube.com/watch?v=RUbp_d2DkYU

marcus_holmes2 years ago

I hate being treated as "just the nerd who pushes the nerd-buttons to make the thing we want work", as if the important part of the work was having the idea and not the execution.

One reason they do this is usually around control. A lot of people feel like they have to be in control of everything in order to be safe. There may be ways you can make them feel safe without needing them to be in control.

Another reason is that until the thing is built, there's nothing to do, so everyone gets involved in that. This happens a lot in startups where they have a "build it and they will come" attitude. It's not true; building a sales/marketing channel doesn't actually need a product at the start, and there's a ton of stuff that needs doing while the product is being built. But it can be difficult explaining this to new founders.

Good luck :)

MonaroVXR2 years ago

> "building a sales/marketing channel doesn't actually need a product at the start..."

Never knew this, can you tell more about it?

+1
marcus_holmes2 years ago
heurist2 years ago

Leave that company immediately and find something that gives you room to breathe.

Kaze4042 years ago

Thank you. That's currently the plan :)

sunny32 years ago

I think I'm in a similar situation and try to find out how to cope with it. The strategy I'm thinking about is - realizing what's happening (as you have articulated wonderfully), anchoring my self-worth else where (writing code / designing original solutions -> pushing what ever that's being discussed by those 3 people to an executable conclusion), finishing and delivering this project asap.

I guess the next step for me is to figure out how to avoid going into such situations (I entered the situation because I was joining a team in an area that I wasn't familiar with and decided to work on an existing project whose owner has a very strong presence and I didn't clarify the specific work item / boundaries clearly in the beginning).

Kaze4042 years ago

Seems like you got a plan! How to avoid this situation in the future is also something I've talked about in therapy, and while I haven't reached a conclusion on that, a major takeaway from my session is that it's sometimes beneficial to not rationalize uncommon situations, as that can lead to self doubt and unnecessary guilt.

Even if we do get into a similar situation in the future, we'll be much better prepared to not only deal with it, but to identify it before it necessarily becomes a problem. To me that's the important bit.

tangjurine2 years ago

tell us the reason! can't be as bad as https://news.ycombinator.com/item?id=27454589

Kaze4042 years ago

I usually wouldn't mind, but my theory involves personal information that would make me very easily identifiable. I'm not hiding my online identity by any means, but when it comes to work related things I'd rather not give the impression like I'm throwing dirt on any specific person. What I talked about in my comment is much more of a systemic issue from my perspective, and I feel like a coworker reading it knowing it was written by me could take it personally.

Edit: you're right though, it's definitely nothing like that. 1 job is more than enough for me :D

watwut2 years ago

So, you do scrum?

Kaze4042 years ago

No. We do "do whatever for 3 weeks and work 12 hour days on the week before a deadline comes". Maybe there's a name for that :p

watwut2 years ago

"Procrastination driven development" maybe?

Panoramix2 years ago

I wholeheartedly agree, if you need daily feedback you're a bad manager (unless you're in some exotic situation like a rocket launch or something).

This issue largely disappears if your engineers are given the proper context, background and system overview.

I'm not advocating everybody should take their project and run with it for weeks on end, but daily updates are ridiculous.

TameAntelope2 years ago

I'd actually flip that, and say if you can't give daily feedback you're a "bad" developer (I'd probably use "inexperienced" or "new" rather than "bad", because it's a hard mindset shift and it takes time).

In fact, not only should you be able to give daily updates, you should be able to ship functionality on the daily. From first line of code into production and in front of customers should only ever take about 2 to 16 hours of work.

If you can't work at that cadence, you're probably not being as effective as you could be, as a developer. A "good" manager enables you to work like this.

dogleash2 years ago

I used to work at an R&D company. While that cadence is possible in a website mill, it’s a laughable blanket statement.

diggs2 years ago

Agreed - I’ve spent months working on a deep tech problem before I could even show a functional core, let alone putting it into production. Some problems take time, experience and foresight to solve and the solution only dovetails at the end.

gffrd2 years ago

Just wanted to say thank you for "website mill" … I'm reminded of this stark difference when talking with a friend who builds ultrasonic hardware.

+1
ngc2482 years ago
nitrogen2 years ago

Keeping a daily log of progress helps prove your research is original.

Trasmatta2 years ago

I strongly disagree with this. This is an approach to development that encourages an extremely limited and short term view on development that leads to low quality software and unhappy developers. It's also only remotely possible with a certain type of software.

strictfp2 years ago

Yes. And additionally, you're going to be context-switched constantly by people wanting to show off their days work. No thank you.

+2
TameAntelope2 years ago
yibg2 years ago

For larger pieces of work, some times it takes me more than a day to just figure out what's where and where I can even get started. I guess I can still give updates daily, but it'll just be "still investigating".

Hell, I've fixed 1 liner bugs that have taken me a week to figure out.

+2
TameAntelope2 years ago
the_gipsy2 years ago

The problem is not giving the update. The problem is this update turning into an invitation to being micromanaged.

beefield2 years ago

Thanks for this comment. It pretty much confirms my hunch that I would not be happy in a "developer" role. I have done quite a lot work that requires writing code. But often it has been projects with literally months before there has been anything that anyone might call functionality.

+1
mh-2 years ago
maze-le2 years ago

> ship functionality on the daily

This creates unnecessary exaggerated expectations. There is only so much you can accomplish in one day, some functionality take way loger than that. We don't want to ship half baked solutions, but we are expected to do so... In order to accomplish that sacrifices have to be made on everything else that is important in software development: proper testing, documentation, refactoring and a clean codebase. Its perfectly valid for a developer to give the update "I am still working on ..." / "I am still trying to figure out:..." / "I am in the process of preparing the codebase for this update" for a certain period of time.

political123452 years ago

I think most people are salty about your comment because they fail to see the subtle difference between:

1) "Everyday you should ship something" 2) "At the end of each day you should be able to tell your line manager in a clear and concise way exactly what you did; if you can't you've done nothing."

2) does not mean ship code: you could have spent 12 hours thinking and reading code. But if you can explain i.e provide a daily update, then you have actually done something, and not spent a day on slack sending memes.

i've had days where I did nothing but read code trying to understand a bug, and then my whole contribution was 1 line of config or 2 lines of code. But I have a clear achievement: I understood an area of the code much better and i have a fix.

Having daily updates to your manager also forces you to not slack and work on the most important problems: otherwise you might be tempted to work on sth fun but not mission critical.

At the end of the day, people should do as they wish.

+1
Trasmatta2 years ago
TameAntelope2 years ago

Yeah, I think it's telling that folks here assumed I meant "give daily feedback" as in "tell your boss what you're up to".

It's probably a lot more effective to keep your team up to date on what you're doing, than it is to keep your boss up to date on what you're doing, and that's where I was focusing.

And yeah, while I did say "ship functionality", you're right, the real value is producing something you can show users. I prefer that ends up being code, because otherwise users are hard to pin down, but it doesn't have to be.

Finally yes, people should do as they wish, but with the understanding that if the thing they'd prefer to work on isn't the thing the team they're working on needs, that the team should be able to go find someone who does want to do the thing the team needs. It's not really fair to drag a team down because one person isn't having fun.

nine_zeros2 years ago

I hope this is comment is made in irony.

heurist2 years ago

There are engineers who can produce on a constance cadence, and there are engineers who need to let the pressure build until a dam breaks and the code comes rushing out. The latter engineers can still be good engineers. It all depends on how your brain works.

The systems supporting shipping daily should exist either way, though.

rurp2 years ago

Due to some turnover I ended up working mostly independently for about a year at a previous job. Nobody cared one bit about the code I wrote, just the end result. Overall it was great! I was surprised at how productive I was in that time. I'm not a partiularly amazing developer, but I managed to ship a ton of work that held up quite well.

Obviously there are limits to this approach and it wouldn't work well for solving really difficult problems, but really, 99% of day-to-day development work isn't that special. A motivated and conscientious developer with average skills can get an awful lot done with minimal distractions.

e12e2 years ago

Sounds like high bus-factor. Were you also expected to pick up "alien" code dumps as other programmers left? Were you happy/efficient working with these unseen code bases?

rurp2 years ago

I had a few coworkers working on very related areas that I coordinated with, plus we did have some contingency plans so one of us could step into the others place in a pinch. But that was a weakness and things could have been rough if I had been hit by a bus.

An alien code dump is basically how I ended up in the situation. My boss left abruptly and a bunch of work he had been handling himself suddenly fell to me. At first it was really stressful trying to get a handle on everything, but once I got over the hump it was quite nice.

daenz2 years ago

The trick is to make the "right" decision yourself while helping people feel like they were heard and had a chance to give their input.

From my experience, people don't actually want to control the output of everything, they just want the opportunity to be heard. What you do with it from there doesn't matter as much, so long as the desired outcome is "correct". If the desired outcome is not correct however... then you have to justify all of the input that you didn't act on.

Trasmatta2 years ago

The tricky part for me is that sometimes I did actually need that input from others on the team. Sometimes it's all just bikeshedding and a waste of time, but sometimes it does help me from going down a rabbit hole that might have wasted weeks of development.

But regardless, I find that whole process exhausting and disempowering, even if there is sometimes a benefit from it.

mattferderer2 years ago

As much as I love the feeling of writing something clever or that feels really well done, I hate the feeling of realizing it's the wrong thing even more.

Trasmatta2 years ago

Agreed, and that's why I mentioned I think you shouldn't just silo yourself. That doesn't seem to work either. I don't really have a good answer or alternative, more just pointing out how the dynamics of team based software development seem to be optimized towards burning out programmers. I don't know how to fix it, but it seems to be a problem.

A first step is probably treating your developers skilled specialists (hopefully you've hired a good team, of course), and not just code monkeys who have to show their manager a progress report every single day.

peakaboo2 years ago

You do know how to fix it - you don't loop in others until you want to.

The problem is our industry, forcing developers to exhaust their energy on pair programming in open offices. May as well be in a daycare center with children all around.

+2
Trasmatta2 years ago
yuliyp2 years ago

In good teams I've been able to bounce ideas off my teammates without pressure. They'd come back with things I hadn't thought of, I'd iterate and they'd respond, etc. After this I left the discussion with a better understanding of the problem, still ultimately in the driver's seat for solving the problem. Getting feedback in these situations is empowering.

In bad teams I end up defending myself from people who want to leave their mark on what I'm doing, or just have different taste than me. Getting feedback in these situations is frustrating and demoralizing.

peakaboo2 years ago

Completely agree with this, and this is why I simply don't loop in others.

I wrote a program the way I think it should be. Clean code, super easy to understand, super low complexity. Anyone can understand what it does.

Thats fun for me, when the code is very simple, reads like English and there are no complex functions.

I don't do real software engineering however (just business intelligence and python programs to extract and load data). But when it comes to looping in colleagues, I avoid it for the same reasons as above.

Its exhausting.

baby2 years ago

> Writing code as a team is almost like writing a novel with a few dozen other people, all of which have differing ideas on how the book should be written, or even what it should be about. It's hard to feel the joy in creating something when you're only a small cog in the development machine, and every decision needs a dozen voices of input.

I believe this is why books most often have a single author. A solution to this, is to agree on the global design, and then have different developers own different "modules" of the design. These modules should be treated like third-party libraries (and should act like third-party libraries vis-a-vis of their documentation and API).

Basically, microservices can exist within your code if you know how to modularize well.

lolc2 years ago

I don't like the analogy to writing a novel because in a novel you do want suspense, drama, surprises and generally a non-ordinary flow of the story. With source-code, you want none of that. The whole process is geared to remove it. And we should not deplore that but embrace it. Maybe there will be non-conventional things, because you have non-conventional requirements, or you're trying something new, but that should be the exception.

e12e2 years ago

> I believe this is why books most often have a single author.

... And at least one editor, no?

baby2 years ago

I see the editor as the code reviewer :p

drawkbox2 years ago

> Writing code as a team is almost like writing a novel with a few dozen other people, all of which have differing ideas on how the book should be written, or even what it should be about.

I use this exact description when discussing balancing creative side of the value creation project processes, design and development over the value extraction side of products. Small empowered teams with an almost startup mindset is key, but even more is time to play to find solutions that can make products that are more like friends than enemies to people.

Engineering/development, creative and product design/development are creative fields, a value creation action and activity.

Business, finance, marketing do not see many parts of this as a creative action but a production line, a value extraction action and activity.

A large problem is the misunderstanding that new projects are value creation not just value extraction, and rely on creativity at inception. Once they are established they can be more patterned and predictable and ramped up, but initially the creative phase is the key to making good products. Smaller teams, more empowering of the people that can create products that get the early points right. Taking long enough in the "open" mode before the "closed" mode is key, essentially prototyping and play is needed, but rarely available in the modern processes and project management systems where engineering is simply "production". There is a pre-production and post-production that is usually left out.

For instance in game development, pushing through a project process before the main game mechanic is "fun" is a problem. You can't get creative on a forced schedule just as you couldn't write a book that way or come up with a novel new concept in some software app that should be a friend to users. The prototype of the project or product must have some time to simmer and iterate on. The first thing managers do is cut that time and sometimes throw too many people at it resulting in Mythical Man Month level mistakes leading to too many cooks. When a prototype or early product has value mostly figured out, then it can go into a more robust process to create variations or iterations. The initial value creation will always be wildly hard to estimate.

Good examples of this in software are programming languages, usually it is one person for a long time then others join in to ramp up when the vibe of the language is set. Same with books, movies, games, anything really. You can't have 10 people drawing the same illustration or writing the same book, the parallel part can be multiple people doing their own to see which is best, but you can't have them all in on one creative project without it being confused.

I have seen companies turn into faction based wars when varying groups don't clearly respect the value creation and value extraction balance, the value creation MUST come before the value extraction. The open mode before the closed mode.

A great talk by John Cleese on the "open" and "closed" mode [1] helps describe this, which I recommend and hope everyone I work with watches. Value creators need time and creativity to create value both in the "open" mode to explore/prototype/build and the "closed" mode when things are decided to ship. The value extractors always want people in the controlled "closed" mode only, the "open" mode is non quantifiable and seen as almost an enemy to the value extractors but is key to creating products that are so good they are like friends to value creators and the people using the products.

The value extractors are who Fred Brooks talked about in the Mythical Man month [2], they think things are a factory with already figured out steps, when you are in a field that uses originality, creativity, the mind over the physical, it isn't like a factory or supply line. Every single project manager needs to know about the Mythical Man month.

Here's a great point by Steve Jobs about product stagnation and the managers/business side [3] and how they can run amok if not controlled to allow value creation to continue, and how monopolies or problems that arise when only the business/managers are in charge. This point is more about larger companies than new projects but the same forces that stop innovation at large companies also kill it in any sized companies when there is no value creation / value extraction balance.

> It turns out the same thing can happen in technology companies that get monopolies, like IBM or Xerox. If you were a product person at IBM or Xerox, so you make a better copier or computer. So what? When you have monopoly market share, the company's not any more successful.

> So the people that can make the company more successful are sales and marketing people, and they end up running the companies. And the product people get driven out of the decision making forums, and the companies forget what it means to make great products. The product sensibility and the product genius that brought them to that monopolistic position gets rotted out by people running these companies that have no conception of a good product versus a bad product.

> They have no conception of the craftsmanship that's required to take a good idea and turn it into a good product. And they really have no feeling in their hearts, usually, about wanting to really help the customers.

Modern project management processes promote shallow change over deeper dives. They create a risk profile for anyone looking to bring new innovations that might be hard to estimate because it will be a perceptual hit. These rigid tightly wound processes are horrible for creativity. Agile itself has been captured with tightly wound controlling mechanisms like the daily standup, and so much weight around trying new things as well as perceptual hits for that. Anyone truly trying to make new value will be seen as an enemy to these systems. Agile was created to give product people more margin to build, but it has been coopted into being used to control creativity which cannot be controlled, it simply disappears when there is no open mode and only a closed mode or nothing but value extraction.

All of this is spelled out in "How Software Companies Die" as well [4]. I wonder when if these realities will make it into the business education curriculum.

[1] https://www.youtube.com/watch?v=Pb5oIIPO62g

[2] https://en.wikipedia.org/wiki/The_Mythical_Man-Month

[3] https://www.businessinsider.com/steve-jobs-on-why-innovation...

[4] https://news.ycombinator.com/item?id=1866486

theflashjames2 years ago

This post has so much insight in it, that I felt empowered when I read it.

Trasmatta2 years ago

I don't have a lot to add except to say I loved this reply. I think a lot of people might miss it since it's down in the replies, maybe you could expand on it, and make it a blog post at some point?

drawkbox2 years ago

Thanks, your post also resonated when you mentioned exactly the way I see it. I will be writing up more on this as it is a theme of mine and have quite a bit here at HN, and other areas where value creators are.

Good news is there are lots of us like it, the problem is since the value creators rarely control the funding and sometimes lose the power to implement these the right way before internal faction wars start. However at all good product and all good companies, you'll see the respect of value creation and the open mode. One day maybe business/finance will see it with the same value.

A couple of points as well, there is an internal and external view of a product. The external view is really all that matters, the market perception. The internal perceptions and processes if they are made too tight or the main focus, the external product suffers. This is one reason I think remote companies that are smaller, or having small teams, do better. They focus on their external view over the internal. Most remote work is virtual just like most communication today and especially the communication with the people that use products. The external view needs to be the main focus as well as simplicity, but also the "friend" aspect of a product. Using a product should be a simple joy, a friendly part of your day. External focused setups work the best to achieve that.

ximm2 years ago

> "usually it should be more like a day" is bad advice in my opinion, and a likely source of micro management. Let professionals do their work.

In my team we always publish some form of status report at the end of the day. This could be a pull request or a list of open questions on the task. For us that is less about micro management and more about bus factor: If a person calls in sick the next day the rest of the team wouldn't be able to continue that persons tasks without this process.

I understand that this can be detrimental when it feels like micro management. But I believe it is more a question of framing.

e12e2 years ago

> "usually it should be more like a day" is bad advice in my opinion, and a likely source of micro management.

Depends what "showing" means - on the other end is doing all prototyping/exploration as pair programming - thus immediately "showing" work to at least one other engineer.

davidhyde2 years ago

> "the biggest mistake I see engineers make is doing too much work on their own before looping in others"

> "For more senior engineers, it can happen because they like to work on their own and may be overconfident in finding solutions. It can also happen if the team culture is toxic and engineers fear getting criticism early in the design process."

Not saying the above statement is incorrect but here is an alternative explanation that is also viable: Senior Engineers are often hired into large large projects so that the company has the capability to address emergencies or modify the existing system accurately as it is often more difficult to work on a large complex code base than to build a new one from scratch. Those engineers sometimes never get to work on greenfield projects and "doing too much work on their own before looping in others" is a way to scratch this itch without the opportunity being taken away prematurely. It also offers chance to produce memorable work as nobody remembers the set of 3 point tasks you completed ten sprints ago.

abofh2 years ago

You are not wrong. I generally sell as a mercenary, and prefer it that way - I've been doing this longer than some of my managers have been alive. I'm paid just as well if they want to "pair program" or jira the whole process, but yeah, you hired me to fix a problem - if you are the problem, I get paid just the same.

Welcome to the real world, if your work is interesting, the clock might not turn on when I'm having fun. If your work is bullshot, I bill tighter than my lawyer

Ensorceled2 years ago

> Welcome to the real world, if your work is interesting, the clock might not turn on when I'm having fun.

Ha! Yeah, I worked on a really cool project for a charity a few years ago: "How many hours is this going to cost us this week, you were working like a warrior?" "35"

amelius2 years ago

> If your work is bullshot, I bill tighter than my lawyer

Lawyers must hate their work.

skissane2 years ago

> Lawyers must hate their work.

A friend of mine is a criminal defence lawyer. I get the impression he really enjoys his work – he gets to meet a lot of people he never normally would (bikie gang members, terrorists, murderers, drug dealers, drug addicts, etc) – and he feels safe in doing so (he tells me that defendants trying to harm their own lawyers is quite rare, rare enough that he isn't worried about it).

Once, at a work function (previous employer), I met one of the lawyers from the contracts department. He was telling me how he used to live in a rural area doing agricultural real estate transactions, now he had moved to the big city to do in-house contracts review for a multinational software company. He was a "top performer" (indeed, this was a function to reward people who'd been nominated as "top performers" by their management)–but he didn't give me the impression he really loved what he did, more that he was just doing it to support his family.

+1
asveikau2 years ago
dixie_land2 years ago

I have a theory that lawyers in many ways are not unlike a security engineer:

you get the satisfaction of exploiting the system, bending the rules to your advantage, making the impossible work. and when you’re good at your job, you get paid well ( lawyer by many more times of course )

case n point: defending OJ

Taylor_OD2 years ago

I believe it has one of the lowest job satisfaction of any white collar jobs. I've wondered that is folks didnt have the massive student loans to pay off early on if they would stick with it.

BurningFrog2 years ago

Many law firms are incredibly well paid sweatshops.

+1
favorited2 years ago
favorited2 years ago

Lawyers aren't tracking & billing in 6 or 10 minute increments to punish their clients, they do it so you only pay for the time they actually spent on your account. It's beneficial that, if they get a 5 minute phone call while preparing a document for you, you don't get billed for the time they were on the phone.

+1
mindslight2 years ago
zomglings2 years ago

Haha I like everything you said except the "pair program" bit.

From my point of view as both a programmer and an employer, this is the cleanest way to make sure knowledge transfers between short-term and long-term team members.

Why the disdain? (If I interpreted correctly.)

nine_zeros2 years ago

Pairing is only helpful when you are new and learning from someone more experienced.

However, it may be a time-sink for the more experienced person, who could be using their limited time on more critical things.

That's why newbies get assigned a mentor, with whom they can pair freely.

But pairing rigidly with the whole team just sucks and is incredibly unproductive.

+1
kstenerud2 years ago
+1
zomglings2 years ago
Victerius2 years ago

> I've been doing this longer than some of my managers have been alive.

In what organisation do 25 year olds manage 50 year olds?

Ensorceled2 years ago

My first job out of university, I was promoted to manager in my mid 20s. One of the senior engineers reporting to me had kids older than me.

Now, they were PAID a lot more than me ...

The first thing they taught me was that it wasn't my job to do the work, because it didn't matter how smart I was, I didn't have almost 30 years experience.

galdosdi2 years ago

Anecdote, but this was the approximate case on the team I worked on at Google (Manager in his mid 30s, team mostly in their 20s with one in his 50s). It happens. Actually, it was nice to see, as some evidence of non-ageism.

I hope to no longer need to work by the time I'm 50, but nobody knows what the future will bring, so I'd certainly like to have the option just in case!

SkyPuncher2 years ago

Not as extreme, but not far off. I believe I'm the youngest person on the team I manage.

I've spent a lot of time in startups - including way too many hours in my 20's working on side-hustles (wife was in med school, so it was kind of my thing to do). I've ended up in a situation where my technical skills are strong (but not the best on my team), but my business/startup knowledge is much better so I can help to ensure everyone is working towards the most impactful/valuable outcomes.

buttercraft2 years ago

I used to work for a company in which employees in some departments would do 2 or 3 year "shifts" as managers. When your shift was up, you went back to a regular employee in the same department, and someone you had been managing took over. It was not uncommon to have a young manager, but not everyone was eligible, obviously.

I think it prevented the "us vs. them" mentality from creeping in, and I got the impression that most managers were eager to return to production work. There were dedicated managers higher up the ladder, of course.

+2
grp0002 years ago
mbrameld2 years ago

It's not unusual in the US military for a lieutenant or captain in their early 20s to manage many senior non-commissioned officers in their late 40s.

+1
dfsegoat2 years ago
imoverclocked2 years ago

A lot. Technical managers need not be experienced technical talents who have made a potentially incompatible shift to management.

+4
icedchai2 years ago
asow922 years ago

A few years ago, I was a "team lead" at the age of 27 managing a team that included one developer over 50 at a big TV network company.

We're both at different companies nowadays, but I've been trying to get him started at my current company's team (which I am senior on, but not a lead) for a while now and he's considering it!

jacobyoder2 years ago

I'm ... late 40s. Have been paid for working on software development in some capacity for... 28 years (first paid contract was 1993), and did hobby/amateur for several years before that.

I'm contracting with a couple different companies, and one of them... the others on the team range from ... 27-32. So... I've been doing professional/paid development work longer than most of them have been alive, certainly longer than any of them have been adults. The manager(s) I interact with - one just turned 31, and one is... I think 29 or 30.

The older you get the more common this may become.

superfrank2 years ago

I worked at a start up where the founders were 25 & 26 and most of their first 25 employees were their friends who were similar aged. In less than two years, there were almost 100 employees, plenty of which were in the 50s.

The company's last valuation has it worth over a billion dollars now and they have a few hundred employees. A good chunk of the C suite and VPs are still those same early employees who are now in their late 20s and early 30s. Some are managing former FAANG employees in their 50s.

jsprogram2 years ago

Which one was it?

ipaddr2 years ago

Many organizations and it is a normal thing.

scrumbledober2 years ago

I have met several engineers that were very much senior to their managers but did not want to make the shift from IC to management.

perfect_wave2 years ago

I'm a 25 year old managing a global team of 8 people. I'm self-conscious about my age both in my 1:1s with my reports and when talking with customers. That being said, it seems like things are going well. My team is doing great metrics and achievements wise and the company we work for tripled in size in under a year.

foobarian2 years ago

You know what I usually tell my managers. "Thank you for your service" :-)

smcleod2 years ago

In a previous job I was team lead of a team that had a person in they're 40s and one in their 50s, I started as lead as a 23 year old and moved on when I was 30. There are many things I'd do differently now, but it was an effective and impactful mostly high functioning team. It does happen.

ttymck2 years ago

Could a 30 year old manage a 60 year old? Certainly a 35 year old could manage a 57 year old?

bayindirh2 years ago

If the 60 year old is wise and humble and 30 year old is open minded and not smug, it'd create a hell of a learning environment.

FpUser2 years ago

Definitely. Just do not micromanage and drag to endless useless meetings.

Hermitian9092 years ago

I've known people who submitted working patches to the Linux kernel at 13, which I'd say is a reasonable start for "doing this". A 30 year old managing a 43 year old would not be strange at all.

dhosek2 years ago

Exactly, I started programming in AppleSoft BASIC when I was 11, picked up 6502 Assembly and Pascal before high school and added C, Rexx. 370 assembler and FORTRAN before I started college. I was 28 the first time I had a manager younger than me. I think the last time I had a manager older than me was when I had a job where my direct report was to the CTO.

2OEH8eoCRo02 years ago

I like the cut of your jib

6gvONxR4sf7o2 years ago

> It also offers chance to produce memorable work as nobody remembers the set of 3 point tasks you completed ten sprints ago.

This is one of the more toxic ones. To get past senior, you often need to be seen to do Big Memorable Things. It sometimes leads to perverse incentives.

closeparen2 years ago

I think it's management and their "agile" philosophy that's toxic here, intentionally depriving engineers of any sense of ownership, autonomy, or vision-fulfillment over their work by constantly bouncing them around across small disjoint tasks.

I am incredibly fortunate to work in a place that values ownership, both explicitly and in practice. Given how widespread the opposing value system is, I'm afraid to ever leave.

someguydave2 years ago

because programmers must be replaceable parts for the industry to keep going at status quo

+1
closeparen2 years ago
skrtskrt2 years ago

To me moving beyond senior means you enable the entire team to contribute together accomplish Big Memorable Things.

This can mean a ton of things, which cannot all be served by a single senior+ engineer:

* mentorship

* seeking out, establishing, and evangelizing best practices, and not just coding best practices: architecture, documentation, testing, ci/cd etc

* high-level architecture knowledge and experience

* evaluating technology choices: tooling, databases, orchestration platforms, etc etc

* assisting management and product with scoping and prioritizing work

* the ability to put your head down and crank out a solution to something in code simply because it needs done and you can do it better and/or faster than others

* laying the framework of a greenfield project, maybe sketching out the codebase or POC for juniors to take and run with

* ...and so on and so forth.

A single person may be able to contribute all these things to a team over a time frame of multiple years, but in a 3 or 6 month time frame, most mortal engineers could only contribute two or three.

nine_zeros2 years ago

If every senior only does internal assistant work, which senior does actual building of complex services?

What is more important? Building better services or being a library writer?

Every point you describe is exactly perverse incentives.

skrtskrt2 years ago

"Write great code to build stuff" is still a core part of the job.

But it doesn't really enable anyone else on the team, other than providing a model of well-structured code to follow - and most people's code is really not as great as they think it is.

I'd rather have a team of average coders who do things to enable and better each other and the team over a team reliant on a great coder or two who can't or refuses to enable anyone else.

belval2 years ago

I mean it's not that toxic, if you are a good worker bee your manager will usually notice and be happy with your performance. Then from time-to-time you branch off to do something more high-risk to add to your promo doc.

I think a lot of people have weaker communication skills than execution skills. So they could loop in everyone early on, but their idea might get killed off because they failed to justify it properly. If instead they leverage their execution skills and make an MVP that will speak for itself, then they bypass that issue.

Aeolun2 years ago

> If instead they leverage their execution skills and make an MVP that will speak for itself, then they bypass that issue.

Hell yes. Forgiveness beats permission every single time.

FpUser2 years ago

>"if you are a good worker bee your manager will usually notice and be happy with your performance"

And other than some bonus never promote you. If you have capability to be anything above that "worker bee" say / ask exactly what you want. If not look for another job. While this SCRUM / Agile bullshit is wide spread and even works in some specific circumstances there are enough companies that are not hung up on moving pins on dashboard and where one can really grow.

Work for yourself. Work with the manager, not for manager.

belval2 years ago

> Then from time-to-time you branch off to do something more high-risk to add to your promo doc.

I agree, that's exactly what I wrote.

6gvONxR4sf7o2 years ago

Maybe toxic is the wrong word. Perverse maybe. But I don’t think that being a good worker bee often gets people past the senior level, at least from what I’ve seen. But also getting past senior is rarer, so maybe what I’ve seen isn’t representative.

sodapopcan2 years ago

Exeactly. There is too much emphasis put on rewarding those who make big, disruptive change and large, solo wins. Someone making a lot of little wins are just as valuable yet usually don't any great accolates for it. Not to mention, putting one person on a large-ish project is a great way to create silos.

watwut2 years ago

It is not even toxic. Modern development is cooperative to absurd level all too often. You don't have any ability to make independent decisions or autonomy pretty much any time. Literally everything is result of negotiation and compromise and what not.

Taking chance to do a bit of focused work and actually do it in that environment is not toxic. It is not like you have run of for months and refused to communicate. It is just ... getting slight bit of rest.

ravenstine2 years ago

Yes, I think this is undoubtedly true. I didn't really learn until I advanced my career that, in some respects, being a junior or mid-level developer is actually better. Being a senior can be a slog, and while I got paid little in earlier positions, I actually got to do more interesting things, screw up more, and build things from scratch.

The other thing that can encourage doing too much work before looping in others is the culture of the team. You are lucky if you can amass a team of people who all have the same attitude of talking to each other frequently and handling a certain level of interruption. I've worked on such teams and miss them. Although pretty much everyone at any company you work at will say "ask questions, don't hesitate, blah blah blah", there are teams where people go weeks not talking or sharing work, and everyone is always too busy to get interrupted. If work gets assigned in large chunks, as can happen for seniors in particular, it can also just not make sense to loop in someone temporarily if more time needs to be taken for the other person to catch up.

philote2 years ago

In my case, I'm the senior engineer and the rest of the team are juniors. There's generally not much I can ask them that they'd know the answer for. On the other hand, looping them in is a good learning experience for them even if they can't help me solve the issue. But due to time constraints that isn't always possible.

EGreg2 years ago

You nailed it. Senior engineers build things on their own because their company can’t afford to hire enough advanced enough people who can learn the system and take over the work without being trained for 6-12 months, and often there is no budget for this kind of ”distraction” from the core moneymaking path.

rory2 years ago

A good point, but the reason I have (and fight) this problem is much simpler:

I like writing code. I dislike talking to people.

coryrc2 years ago

Or, you work at an organization which gates promotion on leading projects, so everyone has to lead things.

Or your organization relies on "consensus" or "influence" to get any project done, and one of the groups (which don't share managers back to the ceo) doesn't want to do the project even though the others think it is important. So do you spend months trying to convince them while doing nothing promotion-worthy in your own?

zachlloyd2 years ago

i see the point here.

i do think giving space for hard work is important. i still more often see the opposite problem of too much silo'd work leads to wasted effort, but for some really hard problems, having a bunch of space to think them through is beneficial.

sdoering2 years ago

I was more often than not 'guilty' of what the author describes. And I actually love being the lone detective on the hunt for a cool solution.

I am not a dev by trade (data analyst) but still love to work on problems solved in code.

A lot of the advice hit home, but what struck me was this part:

> Encourage engineers to get something end to end launched internally as quickly as possible.

This is something my boss never ceases to tell us. When we build something we shall strive to have some first small thing end 2 end done as soon as possible. Rough around the edges, not refactored, code being repeated - all fine. But it has to work end to end.

Because we can brush it up and make it stable later. Because when starting we only have a vague feeling for the problem space and we need to learn the lay of the land by navigating it.

I will always cherish this advice.

swagasaurus-rex2 years ago

I find when this happens, it never gets refactored. The edges can be smoothed, but the architecture is dried and hardens into something that needs to be worked around by everybody else touching the code. The easiest way to solve the issue becomes the only way.

zoomablemind2 years ago

Depends on a team, of course. But happens often with business solutions. Done, whichever way. Next. It broke down in prod? Well, go fix it, it's yours now...

sdoering2 years ago

My experience differs. But maybe because I love to refactor and create a clean architecture.

Also I learned a lot from my boss' refactorings. Before that I never would have imagined how far a good abstraction can be driven.

kitsunesoba2 years ago

The frustrating thing is when only the first half of this philosophy (ship now, fix/polish later) is adhered to, where things get shipped frequently but seldom followed up on. The incentive to finish things needs to be strong for not only the engineers but also for the product teams and managers directing them, but as far as I can observe this is exceptionally rare — in fact it almost seems like the norm for non-engineers to push for shipping new features over polishing older ones. A lot of the engineers I know would love nothing more than the opportunity to polish the project they’re responsible for to perfection, but are never given the chance.

sdoering2 years ago

I agree. I know that the freedom to create sensible architecture is a privilege.

Even if other things may not be perfect (but what job is perfect in all areas), my boss knows the value of refactoring towards a stable and maintainable architecture while keeping a reasonable schedule for shipping.

danielmarkbruce2 years ago

If you can present a metric which shows that said thing is bad on some dimension, and explain why it's bad for the customer (/business) and why what you will fix will improve it, and how much work is involved, you'll have a better chance of moving it through.

aimor2 years ago

I agree, but I've also tried to polish things without a strong need and it's difficult. The work can feel burdensome, useless, undirected, and sometimes requires major changes that can't be done (without inflating the scope of the work).

crehn2 years ago

This should nearly always include writing integration tests (that run on every change) to ensure you can refactor with confidence.

If there are no tests, the team will waste a ton of time anxiously monitoring and reasoning about the messy code and the impact of their changes.

sdoering2 years ago

I do. I even implemented tests for tracking code to be developed locally (including mocks).

This way I'm able to quickly and confidently refactor as well as add to existing tracking code (web analytics).

teirce2 years ago

I always phrased this as "You don't know how to build something until you've built it."

It's very easy to get stuck in design hell and write yourself into a corner. It's much better to get something that does what you want, then you change it to do it how you want it to.

Though like others have mentioned, this requires an engineering culture that values the second part.

aimor2 years ago

I still find it amazing how many "first small thing end to end" wind up being the last major version for years. That's not a bad thing, I've grown to love it, and I think it's a tenet I should make a more conscious effort towards.

baby2 years ago

and then it never gets refactored.

But essentially I agree with you, good writers use the same technique: write once, revise many times.

Good code, IMO, only exist after many refactors.

beerandt2 years ago

It might be good advice, but that's not engineering in concept, spirit, or practice of the term.

I don't usually pick an absolute, decisive side in the "what counts as engineering" debate, but this is the opposite of engineering.

rockemsockem2 years ago

Lol, you think physical engineers don't throw together prototypes that they know won't be good enough for the final design just to get everything working together?

beerandt2 years ago

They do a preliminary design. They don't throw up some 2x4s and corrugated aluminum to use as a building in the meantime while doing a real design.

Or they iterate designs and prototype manufactured products.

They do not stamp and accept professional liability for thrown-together designs that bosses want to prematurely push out the door into production.

They tell the boss to budget them what's needed, or go find some other sucker to stamp it.

I'm mixed on the pros and cons of professional licensing, but it does give PE's a great amount of personal authority in refusing to be a part of substandard work. Even to clients and bosses.

rockemsockem2 years ago

I would add that not all physical engineers have to get licensed to do their work.

So what's the difference then between that type of iteration and the type of iteration you see commonly in software? It sounds like the main differentiator for you is "doneness" or something similar to that?

lukas0992 years ago

But the difference between preliminary design and final product is much smaller in software than in building, so the cost of making an actual working prototype during the early phases is much less.

bob10292 years ago

I am stuck with a delicate balancing act around this one.

Our organization arguably would not exist today if it were not for developers doing "too much" work on things before bothering others. Our product would certainly be worthless trash today if we had to design by committee for every feature. We took extraordinary risks that simply could not have been planned into reality. Most of those risks were taken by individual contributors without anyone being explicitly aware of the magnitude of those risks.

There is a price to be paid for asking permission. Especially if your team members lack the same vision/ambition and are unable to conceptualize the path you laid out. Clearly, this is a problem for both parties, but it is a big reason to sometimes go off on your own, build a whole goddamn thing in peace, and then show it to the team. When others see a complete solution, even if its not 100% what the business wanted, it makes the conversation substantially more productive. It's the fear of the unknown/unseen that makes project managers nervous in my experience. Why start a hard thing at all if the conclusion is ambiguous at best?

On the other hand, we lost ~4 major customers to technical iterations over time. This was something we could have avoided by polishing what we had at the time. Problem is, that thing we would have polished was an abject failure in terms of strategic sustainability for the organization and our customers at scale.

TameAntelope2 years ago

I think it's telling when you call this "asking permission". You should never need to "ask permission" to give customers some small amount of value with a short turnaround.

emptysongglass2 years ago

The longer I work in this industry the more I reflect on the value of all this accretion of process: Agile, Scrum, PI planning, daily stand-ups are counterproductive to real work. So much of it, the sprints, the retroactives, the sprint planning, feel like taking place in the stead of real work. (I reached for the common "instead" of here but wanted to emphasize the work being removed or substituted by not-work).

Real, deep work, is largely a solo affair. Teamwork is trusting your team that they will do their work.

I can think of only two processes which truly requires communicating over real, smell-that-earth honest work. That is: seeking counsel and asking for help because you are well and truly blocked. For the latter, the process of learning enough to become unblocked, even if it takes a long time, can make the practitioner a better software developer forever vs the shortcut of a quick, "do you have a minute" disruption to another developer's time.

Gumroad's philosophy and practice of work [1] struck a chord with me. No meetings, no deadlines. Just a commitment to production, whatever the method, whatever the schedule.

[1] https://sahillavingia.com/work

pphysch2 years ago

There's also the flip side to this, "doing too little work before looping in others". Management brings overhead. Meetings bring overhead. Not every (sub)project needs multiple ICs.

That said, I think the E2E MVP/"tracer bullet" approach is a good compromise. It sets a clear milestone, which could be achieved by a single IC, but which provides something tangible for a team effort to build on (or meets intractable obstacles and and dies prematurely, saving everyone time before the PM engine is spun up).

pojzon2 years ago

I’ve faced worse issue. So you are thinking about problem solution, you created a design and you ask ppl for their opinionated view about the problem and your solution.

Issue is - they cannot even give you a good feedback because they are not that advanced.

The issue of being a great engineer is that there are not many great engineers you can have a constructive discussion with.

You are sometimes even “expected” to deliver solution alone, because there is noone who even grasps the concept.

One could say its simply an incorrect team composition in this case but well.. what can you do about it when you are also asked to in the same time train ppl who clearly dont have the capacity to match your level - and better - they are supposed to reach that level soonTM.

reureu2 years ago

Amen to this. In a similar vein, in a heavily resourced constrained environment, the rest of the team may be really competent but be struggling to meet their own deadlines so just don't have the mental bandwidth or time to provide any feedback.

I've had this issue at a few jobs in the past, and I know I've come off as the lone developer who ventured too far... but at every step along the way I stopped, sent in a PR, scheduled a meeting, etc but got virtually no engagement. And I was still getting pressure from stakeholders to deliver, so had to keep moving :-/

I think OP brings up an interesting problem, but I don't think the solution is often as easy as sending in earlier PRs. It might actually be a structural or cultural problem in the organization.

pojzon2 years ago

> It might actually be a structural or cultural problem in the organization.

It's indeed often a structural and cultural problem. I'm yet to see some organization to turn that around.

throwaway716832 years ago

This reminds me of a coworker that I've had bad experiences with. He fancies himself an architect, but he consistently refuses to accept any feedback on his designs. If we give feedback early in the process, he complains that we're nitpicking an incomplete design. If we give feedback when he deigns it completely ready for our review, he complains that he'll have to throw away so much work. All throughout, his refrain is that we "just don't understand his design".

I agree that it's harder when there's an absence of peers at the same experience level, and for problems that can be completed by one person, it's probably not necessary to seek validation. But if it's a problem that requires a team effort, building shared understanding of the design is at least as important as creating the design in the first place. Yes, it's more work if it doesn't click immediately for everyone else, but it's essential.

And sometimes in the process of explaining it so that even a "not great" engineer can get it, we can better understand it ourselves. And sometimes even a layperson can bring valuable insights once they get the gist of it.

pojzon2 years ago

It only sounds good in theory. Reality is that in most cases this discussion is pointless and you are much better just explaining.

Example. You discuss different ways of data replication and have to decide which suits the project the best.

Issue is only you have experience with multi-region data replication and people you discuss the issue with dont even understand how replication works.

From manager point of view -> you were hired to guide those ppl.

Thats what happens in consulting like 99% of the time. You are the part of the team but you are often expected to provide the solution.

You can “explain” how it will work, but 9/10 times you wont get any feedback because ppl that you are supposed to deliver that project with simply dont have the knowledge required to have a good level of discussion.

Its like saying “PHD Doctors should have even field discussion with anti-vaccers, because both of them have something to say”..

Everyone has something to say, whether its something valuable, its a different matter.

alexfromapex2 years ago

I've been guilty of this at times but what I would add is a certain type of environment encourages this behavior. If the business or teammates are very reluctant to let engineers work on what they want or give harsh feedback it encourages people to retreat into their safe space and try to create something they feel is worthy of feedback.

Steltek2 years ago

I think there's a new phenomenon that needs to be addressed: poor WFH communication channels. By encouraging radio silence, so as to not "interrupt anyone", things get missed.

Also some people feel the need to tightly control group chat. Either content (no "offtopic"), membership, or # of rooms. Some chat platforms encourage this by restricting who can create/manage rooms or how rooms are linked together (discoverability).

It's an unexplored area of knowledge for most people in the new WFH life everyone's leading.

bryanrasmussen2 years ago

Or if teams are uncommunicative you can end up with not getting a usable response on concerns raised, need to march at some point and without feedback you decide to march in the direction that seems most reasonable to you. Later on it turns out that was right into the swamp.

Phelinofist2 years ago

Can confirm. My lead is pretty picky with everything and expects 110% correctness. Even if my solutions works, is maintainable and extensible it is not how they would've implemented it, so it's no good. Argumentation is sometimes pretty artificial where some made up rules are the gold standard. That plus comments like "that is bad style" (for something that I've seen in all my past jobs + in a lot of OS code) make me not really want to loop them in.

But the job pays well and has interesting problems to solve, so I guess I will put up with it for some time more.

Buttons8402 years ago

Yes. I do this because interactions with others are a net negative at my place of work. In terms of quantifiable rewards, 99% of interactions are +5 or +10, etc, mixed in with the occasional -15000. In the end the expected value of interactions is negative. All because of one or two very bad interactions a year; the rest being positive, but close to neutral.

Cederfjard2 years ago

What kind of interactions are those extremely negative ones, if you don’t mind elaborating?

Buttons8402 years ago

Most recent was learning we weren't implementing something in the way that was expected, which required a lot of rework and sparked conversations among management that our team was incompetent. We were completely blindsided by it all, leading to a feeling that any interaction might randomly turn into a similar debacle.

But, when things go well they say "good job", so that's nice.

disposableuname2 years ago

The original post contains

> It can also happen if the team culture is toxic and engineers fear getting criticism early in the design process.

I think the author would agree with you.

zachlloyd2 years ago

i do agree

vanusa2 years ago

Y-e-p. It's not like these retreats happen in a vacuum.

folkhack2 years ago

I'll be honest - half the time it's trying to keep it from other engineers who are overly eager to have an opinion because a) they're low-output and looking to posture, and/or b) or want things to be done a different way.

At least the business side of the house appreciates the spec'd work being accomplished.

yjftsjthsd-h2 years ago

Intentionally not communicating things in order to prevent bikeshedding is a dangerous game to play and a symptom of a broken environment, but that doesn't mean it's not sometimes a valid approach.

folkhack2 years ago

Agree - and it 100% comes from broken teams/environments/people. In engineering, I find most teams are more invested in tearing each other down more-so than building each other up - that's admittedly very anecdotal and personal to me.

commandlinefan2 years ago

This whole post strikes me as somebody making up a world as he believes it ought to be and then suggesting advice for navigating that world, rather than the real one. For example:

> Always encourage engineers to show their work as quickly as possible

Yep, that sounds like great advice. On "paper", anyway. I tried to do that when I first started out, too. What I found was that communicating "this is just an early draft, it'll be better when I'm finished" was well-near impossible, no matter how hard I tried.

DoingIsLearning2 years ago

I suppose 'know your audience' applies here.

Generally the higher up the food chain the less likely that people will 'get it' if it is not an extremely polished Proof-of-Concept (there are exceptions of course).

If I am going to play amateur psychology, I would say that people who are generally more perfectionist types and are likely get caught up in details are less likely to give a healthy review on work-in-progress.

adverbly2 years ago

They missed one reason why it can happen: Because doing things "the right way" is too slow, and the engineer is trying to skirt around process because the company moves way too slowly. Not out of malice or negligence, but out of a fear of the megacorp killing agility. I've seen entire teams at megacorps or governments try to keep others in the dark with projects that would be crushed under strict corporate rules.

gmfawcett2 years ago

It doesn't have to be a megacorp. Looping new people into a deep problem takes time, and can kill momentum if not done in a strategic way. Your personal time on any problem is finite, and you can exhaust that time-budget on bringing the wrong people up to speed. This is doubly true when the other person isn't on your team or in your organization: e.g., bringing in vendor support. (Maybe your experience is different; in mine, bringing in remote experts doesn't guarantee a faster resolution.)

Veuxdo2 years ago

Sometimes you have to dive into a problem, experiment, try things out.

There is such a thing as premature collaboration.

If you want to be truly great at something, you need to practice it consistently by yourself.

pojzon2 years ago

Indeed, question made by managers is:

“Can you train in spare time?”

“While working on your own projects”

strict92 years ago

Insightful article but surprised at the recommendations. Teamwork is important, yes... but smaller task sizes should have been mentioned too.

>Finally, after several weeks, the engineer shares an update, and one (or many) of the following bad things transpire:

Several weeks? If you are giving developers open-ended tasks that take weeks or more to complete, imo it's asking for things to go off the rails.

The most effective way I've found to avoid this situation is to ensure that worked assigned is broken down into tasks that are as small as possible.

When assigned work is limited to small deliverables you get smaller PRs, limited business logic changes to get lost in, fewer integration changes, etc.

jbay8082 years ago

I'm currently realizing that laying out a moderately complex PCB can take more than a week, but there's not much to be gained from breaking it up into smaller pieces. You kind of just have to do it.

bob10292 years ago

Some problems are impossible to subdivide in a practical way. Having a team that can respond dynamically is really the only general solution I've ever seen.

strictfp2 years ago

A few things;

1. Merging often and early might be viable, but it might also expose your colleagues and the codebase to your exploratory process, which might or might not be desired/possible. If you're making semi-permanent changes like API modifications or database table updates, going this route will mean a lot of extra work.

2. Too many chefs. If you open up for too many questions at the start, you will get a gazillion conflicting opinions thrown at you. You'll need to limit the audience somehow, or bring forward a clear idea or opinion. This leads to developers working a bit on the side. I don't mind this, I think it's good to give autonomy to working groups and let them make mistakes, as long as there is coaching or feedback in place in the long run.

3. If you go the route of designing a bit on the side first, to save time compared to 1), you might suddenly find yourself in the situation that the major parts feel quite done. Adding polish is now just a minor addition to what you're already accomplished, so you might do that before putting up the PR. This means that a complete solution showing up as a PR doesn't necessarily mean that it was over-engineered or overly polished on the side.

4. Not "syncing" too often saves time; less context switching, distracting information, and time to reflect on decisions and design.

babbledabbler2 years ago

It's usually a mistake to build a large scale solution without consulting with others in your organization or team. Other engineers often have good feedback that will make your solution better and you are likely missing some core premise or context.

It's also a mistake to seek too much approval from others before proceeding. In any group of X people, Y% won't agree with you, and of those, Z% will be uncivil. By uncivil, I mean harsh criticism or otherwise toxic behavior that is not constructive.

If the organization is healthy that Z% is small and troublemakers will be handled by management if they do act up. If not that Z% will basically become like bridge trolls and you will be opposed by a confederacy of dunces every time you try to do something of consequence.

I've experienced both of these scenarios, and striking the right balance is an art and a science that boils down to reading the politics of the place and getting buy in from some key people so that your project at least has a fair shot. Sometimes the place has gone toxic and it simply can't be helped.

If you're in a situation where there is a high percentage of Z, you should ask yourself if the work you are doing is worth playing the politics necessary in order to get the job done. If yes, get smart, read books like the The Prince and Art of War and figure out how to play the game. If not, get outta there as expeditiously as possible, and put your time and effort to something more worthwhile. If you want to be kind, let management know in a professional way exactly why you are leaving so that they can have an opportunity to try to make life better for your colleagues.

mberning2 years ago

Spending a few weeks on exploratory or speculative work is not really a huge time commitment. If it was going to drag on for months I would question it.

I also challenge the “deliver in small PRs” idea. Yes in practice that would be ideal. But often when you are doing something completely off the map there is no point to submitting the PRs for the 5 things that didn’t work. The author is falling into the same trap that scrum advocates and agilists fall into. Anything can be broken down into teeny tiny bit size deliverables and managed that way. Again, it would be ideal if that were the case, but sometimes you just need to give your best engineers some time and space to swing for the fences.

alokedesai2 years ago

I work at Warp (https://www.warp.dev/) where Zach, the author of the post, is the founder.

One practice we’ve gotten into the habit of is demoing projects at standup as soon as possible. I’ve found this has been useful to force myself to get to an end-to-end version of a project sooner. This is useful not just in derisking the technical implementation but also in getting product feedback sooner. By playing around a live demo earlier, we often find that the product experience needs to be refined in ways we couldn’t validate from Figma mocks alone.

blindmute2 years ago

I'm of the opinion that if the problems outlined in the article happen, it was because of poorly defined work. A senior engineer should be able to work on something with no communication for a week and it be correct. If it isn't correct, the work was not defined correctly prior to starting the work. Daily updates and frequent collaboration are not the solution; they are a stopgap masking unclear requirements.

TillE2 years ago

That's basically true, but I don't think anyone has a good general solution to unclear requirements besides constant communication and fine-tuning, a la XP/Agile.

I like working on a module with interfaces and behaviors which are set in stone, but I find most of my work is a lot more exploratory than that, so the "clear requirements" can only come after it's about 90% done.

Ensorceled2 years ago

I have two big rules for developers that report to me:

1. The 5 minute rule. If you are stuck for more than 5 minutes reach out. Once the developer is on the team for a while, this becomes 15 or 30 minutes.

Caveat ... truly stuck ... tried a couple of things, googled, tried some more ... wondering what to try next.

One thing I try to do with a new start is go ask them for help in the same way, "Hey, 5 minute rule, I'm think I'm missing something simple here."

2. Project Initiation Memo

The is NOT a PRD, it is a high level "I think this is what I'm supposed to be doing on this project and why". It might turn into a PRD if one is warranted. It's really just a "did you understand the problem correctly"

I've avoided so many massive f'ups or developers drifting into silent frustration for hours with these two rules.

ketzo2 years ago

What's a PRD?

Love the five-minute rule, by the way. I tried to apply that a lot especially when I was just starting at my job. So many things that I would spend two hours trying to fix, only to be told the next day that we had a super simple internal process to fix that thing.

Ensorceled2 years ago

Product Requirements Document ... a full specification of everything the software needs to do.

Sometimes VERY detailed, sometimes not so much.

TameAntelope2 years ago

They could probably just write this in code, and save a lot of time.

watwut2 years ago

> Caveat ... truly stuck ... tried a couple of things, googled, tried some more ... wondering what to try next.

That is not even possible within 5 minutes.

I would not want to work there honestly. Just being unable to solve problems demotivates me. It sounds like I will get off everytime I am slightly slower to pick something. This would be too stressful for me.

Ensorceled2 years ago

Yeah, you missed the point. You don't need to solve the problem in 5 minutes. You need to be 5 minutes in a state where you have no idea what to do next.

Why would you want to be sitting there spinning your wheels? Most people find that feeling of helplessness demotivating and stressful which is why I created the rule.

watwut2 years ago

Because, when I don't know what to do for 5 minutes, there is super high chance I will figure it out within reasonable time still.

Giving up after 5 minutes of not knowing what to do is absurd.

> Most people find that feeling of helplessness demotivating and stressful which is why I created the rule.

Your rule is making people helpless, it makes them think slight stuck means they can't do it. So they will forget how to solve problems and will end up limited to do only simple straightforward tasks.

Ensorceled2 years ago
blintz2 years ago

I think I do this because it is more fun. Involving lots of other people, especially non-engineers, really can suck the fun out of programming for me. I'm not antisocial - I love to discuss what I'm doing and bounce ideas around with other IC engineers. But PM/management incentives are generally aligned towards viewing exploratory work as a waste of time; it might be, but it's what makes programming fun, so if I don't get to do it, I will kind of just consider quitting. Of course, there are times for exploration and times for execution, but to be happy at work, I think most people need to have (and deserve) a mix.

I'm sure the PM and engineering lead and the company in general would prefer that I produce small deliverables on a frequent cadence, for a variety of reasons: (1) to make sure I'm doing work and not goofing off, (2) to provide better visibility to higher-ups about progress towards an ultimate goal, (3) to encourage me to prioritize delivering finished products over say personal learning, work-life balance, etc.

I hope I don't sound too rabidly anti-work, but when I look for jobs, I pretty much prioritize the autonomy that management will give me over most other factors; nothing really sucks the joy out of programming quite like being told to break your work into "smaller tasks" so the burndown chart is prettier.

elric2 years ago

Knowing when to loop in others is one of the skills that makes a senior engineer. Too early and you end up wasting other people's time. Too late and you end up wasting everyone's time. Finding the sweet spot is important, but it's also important to learn which questions to ask. It's one of those skills that I wish could be taught, but it seems something you have to get a feel for over time.

kerneloftruth2 years ago

"Looping in others" is an opportunity for others to say NO, or to try and redirect you, or to jump (unwanted and unneeded) onto your band wagon. If I'm working with true peers (not age or title peers, but truly similar in talent and ability), then their early involvement or collaboration is great.

Generally, however, I prefer to get solutions developed to the point where they are their own proof. It's much harder to argue against something that's (near or entirely) completed and which proves to work. It's fine for me to then involve others to get their feedback, etc.

TameAntelope2 years ago

Proof to whom? Shouldn't you be developing things your customers need, not some pet project you enjoy working on for its own sake?

jlokier2 years ago

Proof to whoever the stakeholders are, presumably the customers in your model.

Proof that it satisfies what the customer needs or wants - something which can't be demonstrated until the would-be solution reaches some level of demonstrable maturity.

For many engineering solutions, you can talk about them earlier, handwave, present, but nothing conveys that it actually works, or sometimes even makes sense, short of a working demonstration.

Why so quick to assume it's a "pet" project? If the developer is doing it right, they are making exactly what the customer needs, but the customer does not have the developer's expertise to recognise what will work at an early stage.

We are not talking about things everyone understands and could have an opinion on, like say the colour and layout of the login window.

Take something that requires deeper work and hired expertise. For example suppose you've started to design a new kind of GPU technique that will double the customer's calculation throughput for the same power consumption. They hired you for your expertise to solve that sort of problem. They have no idea how it works though, and for the first month you have only an outline of a new algorithm, that only peers at your own level could understand well - and you don't have any peers in that area. And most of figuring out the details is on paper and whiteboards, math and logic along with throwaway experiments to measure. The first line of code in a working demo is not possible to figure out until 3 weeks in, and it takes only 1 day of coding and 2 days of polish after that to finish.

That sort of thing isn't a pet project. It might not even be fun; it might be quite stressful, after all it's a higher risk to the developer to pursue such paths. It doesn't fit into daily PRs and isn't even a coding problem at first. Yet it's exactly what the customer needs, what they said they hired you to accomplish, and what they will appreciate if it has reached the point of "proof" when shown.

It will be incorrectly assumed to be the developer's pet project if it's demonstrated before it works, though. Thus the reason to build it up to "proof" level, if you're sure the customer needs it.

TameAntelope2 years ago

So... how do you know what those people want? How do you know what you're building in 3 weeks isn't something totally different from what the users now want?

The answer is that you, alone, don't. By spending more than a small amount of time building out the simplest possible version of what the customer wants, you get their feedback along the way.

It's generally not true that you need many weeks, or even a full week, to build something you can show a user. Usually you're not being creative enough to figure out what to show your customer if you can't think of a way to provide value in a few days.

There are rare exceptions, but in the vast majority of cases you can build something for the user quickly, even when you initially think you can't.

This isn't even my opinion, it's the observed practice of a whole generation of developers. Read "The Art of Agile Development" if you want to know more, it's extremely helpful if you're trying to understand how to achieve the delivery I'm talking about.

+1
jlokier2 years ago
gorgoiler2 years ago

Solid advice. Everything is such a difficult balancing act when you work with other engineers. I say this because at the other end of the spectrum its really easy to land yourself and those around you in needless drama by asking too publicly for feedback on ideas. Hey everyone, just wondering what our thoughts as a team are on auto formatting the codebase / switching tabs to spaces / repainting the bike shed?

Some wise advice I once got from an engineer who has gone on to be a stellar engineering leader: utilise the power of managers. Good managers are drama fire breaks. They can tell you — without raising the emotional stakes with anyone else — why a particular bit of tech debt exists, whether anyone on their team is going to be amenable to you fiddling with it, and who to work with directly on anything likely to cause drama would it have been more widely shared.

Managers aren’t immune to drama but the good ones can help keep it minimised.

lifeisstillgood2 years ago

A late comment I know but one I just realised is important.

This whole article bothered me. And the realisation is that it expects upfront design to work as something distinct from coding.

"The code is the design" (Jack Reeves) is a fundamental point - until you write the code, you are just dealing with "artist's impressions" - vague ideas that might not hang together. The code has to be written (to be thrown away) so that things can be really worked out.

Other points:

* everyone does not have time to be always commenting on everyone elses iterations. Yes there is time for the big architectural design. But every day? If I am commenting on some other engineers work daily and not actually working with them something is off.

* going off and coming back with a big PR. YEs thats bad. Going off and coming back with a Proof Of Concept that will inform the discussion. Thats good.

With a Big System, the right way to do it is to do one (at least) to throw away.

babycake2 years ago

To be honest, I don't think this is any of the engineer's fault. I think we're an open creature by nature; we like to share and explore ideas with others.

In the corporate field, what I've observed is that deliveries are most important. Not just any deliveries, but the project has to be big and "impactful" (as in, other teams use it too), and you personally have to own it. Like your name has to be attached to it. No one is going to remember your tiny fixes here and there, or tiny feature implementations in the larger system, even if it's tracked in sprint. All that stuff gets looked down upon as just 'doing your job'.

To get any kind of recognition and ultimately, a promotion (or better raise, better rating, better bonus, etc), we absolutely have to clam up and take entire ownership of the work. If that's not done, other people can swoop in and steal the work. Things become need-to-know basis for your other fellow devs, design meetings is just you leading them and asking if this is fine, etc. Everyone has to know you're leading the project, and you have to constantly enforce that knowledge to put down any attempt at a takeover.

I've personally witnessed this happening to an older and more senior dev when a college graduate tried to assert himself on the team until the senior dev fought back with office politics.

In the end, office politics is what matters, along with your work to back up your office political agenda. Another senior dev could come in and take your project, claim your code is terrible and needs a rewrite, etc. You can only win if the boss is on your side, and that requires you to take on more than you can chew (and of course, deliver it all) to get on the boss's good side.

Imagine if we didn't have that kind of pressure of delivery in the workplace just to get recognition. The first example that comes to mind is Open source work. People just contribute, we share and deliver openly, and as a result community projects grew so big our entire corporate infrastructure became dependent on it.

quickthrower22 years ago

> Imagine if we didn't have that kind of pressure of delivery in the workplace just to get recognition.

While the places I have worked might have a tiny element of this your situation sounds extreme.

What I have seen is yes you do have to do “perception” management to keep a pulse on “how am i rated”.

Having a few long time trusted people vouch “this person is good” helps and all you need to do is work with them and show that you are good, both in attitude and capability.

However your description sounds like a dystopian “house of cards” scenario that I would be looking for another job asap. If the programmers are more like politicians that is very odd and a bad sign.

babycake2 years ago

I should clarify this behavior is mostly at larger companies... and although it's my anecdotal piece, it is what I've consistently seen at different companies and what my friends tell me they've experienced at other large companies. I've also worked at smaller places and this behavior was not as prevalent since everyone knows everyone on the dev team.

Also, at larger companies your manager tends to reorg. I've gone through 5 managers in a single year before. And with them goes all the goodwill you built up during that time. New manager comes in, and it basically resets your 'perception' factor. The old manager might tell the new manager that some people are good, but you have to get lucky to get the new manager to care, because they haven't seen the results with their own eyes yet. That small time window is when it's ripe for someone to swoop in and claim ownerships of projects, while smooching up to the new manager. That's what happened with the senior dev I saw, but he had aces up his sleeves. What an epic showdown.

Yea, I should leave probably, but it's just one burning ship to another. That's our fundamental reality.

smugglerFlynn2 years ago

What you are describing is mostly related to practice of building organizational units focused purely on implementation, and nothing else. Your personal success in such a unit depends heavily on a number of successful implementations under your belt.

The more organization separates project implementation from the goal-setting and strategic work, the less reasons are there for people responsible for implementation to focus on something different than just getting another green checkmark on that project milestone (and getting recognized as the one who was most impactful in getting there).

Sustainability, recognition of actual business value, meaningful team work — all of these quickly go out the window as people focus on gaming the only metric they’ve been assigned.

alanbernstein2 years ago

> Internal Server Error

I do make that mistake quite often!

iab2 years ago

Inadvertently insightful

zoomablemind2 years ago

The author obviously draws on own experience, thus the conclusions. However, an important aspect is the team and the process, not just the dev and their behavioral patterns.

If a "loosely-spec'ed" feature is assigned to a single dev for implementation, then there must be either reasonable expectation that it could be delivered solo or that the blanks are not critical for the result.

Either way, such "pattern" of a supposed dev-vs-team antagonism may be pointing rather at process deficiencies or disbalanced expectations from management.

When team management believes that all is clear as day and could be done in a week-span, the devs may have a hard time affording themselves a prototype just to figure out what is there to do, so delaying the feature delivery is a simple hedge.

heisenbit2 years ago

While this may be true there is real long term benefit gained by me trying hard for just a little longer: It takes time to truly understand the context and form an own point of view. I take time to find quality reference documents. I take time to do a few experiments. I take time to write down and order my thoughts. Asking someone if required when I have done my homework then yields faster and more effective responses. I get higher level responses that complement and extend my groundwork. Even if I believe I know the answer I find asking can help if only to establish and deepen relationships. Ultimately it moves me in a position where others come to me.

Of course doing a submarine dive for weeks is never good except to serve as a straw-man for a blog post .

thrower1232 years ago

I've never known any serious work to actually get done without people "going dark" to actually accomplish it.

The constant statusing that doesn't allow one four hours of uninterrupted concentration is demoralizing and grinds progress to a halt. There's a reason more code is authored between 9pm and 5am than between 9am and 5pm, but that wears engineers out badly.

zachlloyd2 years ago

I'm the author of the post - would love any feedback / similar experiences / contrasting opinions!

jseban2 years ago

The description of the "problem" is that the requirements specified in the beginning were wrong, and then the developer is blamed for solving exactly what was specified, and not constantly asking management every day "have you changed your mind?". I don't understand at all, how this is the fault of the developer, talk about expecting the developer to bend over backwards for any product manager. How is it not reasonable for management/PO to be responsible for 1. sending devs off in the wrong direction, and 2. not notifying them as requirements change?

This is just another way of saying "management is right, even when they're wrong, and you need to accept that".

Jabbles2 years ago

Non-trivial problems often require exploration of the solution space. You're not expected to ask management if they've changed their mind, you're meant to present your finding so far, and ask if they have any feedback.

Simply stating that you did as instructed is not a viable excuse for a human, that's not what they're paying you for. Computers can get away with it.

jseban2 years ago

> Simply stating that you did as instructed is not a viable excuse for a human, that's not what they're paying you for.

Getting paid for doing what someone tells you to do, is literally the definition of a job. What you're saying actually, is that it's not your job to do your job, it's your job to also do the managers/PO's job.

Jensson2 years ago

You also get paid to be the scapegoat for when your manager fails to do his job, like in this story.

jkaptur2 years ago

It's great to see "I'm still exploring X" called out as a standup antipattern. I've heard and (hi Zach!) said this many times.

... But I've generally heard it most frequently from the tech lead and/or manager at the standup. It's easy to justify: "as the TL/M, my work is ill-defined, meeting-heavy, complex, externally-focused, and long-term! I'm not just building a feature! It's hard to describe!"

In my experience, this culture percolates with lightning speed: more junior folks immediately understand that to be senior and high-status is to give vague updates (often with a dramatic sigh and a self-deprecating joke about getting nothing done).

So it's good to exhort feature-building ICs to show incremental progress on that feature, but I think this article should have a heavier focus on the most senior folks at the standup.

waynecochran2 years ago

I am an older software engineer and have noted that a lot of introverted engineers love to work in their own silos. Some of the smartest engineers are introverted and do not want to be bothered; worse yet, because of pride they often do not "suffer fools" well and avoid working with others. Working with a group of smart and humble engineers that are constantly "borrowing each other's" brain is very effective and enjoyable experience. And everyone has a good sense of what everyone else is working on -- sunk cost is more frequently avoided.

nuancebydefault2 years ago

I feel the same way. Lot's of experienced engineers don't like to be bothered too much, have the feeling they know best and just design and implement the way they have it in mind. Juniors on the other hand don't like to bring their beginners mistakes too much in the open, hence they work hard and long to avoid that. Both of these situation are largely sub-optimal. A good manager knows this and asks for feedback in time, in an interested way, without being too pushy.

eatbitseveryday2 years ago

Please write the insight into the title of the post, rather than hiding it under a click-bait. Your site is down now due to traffic and the original HN title (reflecting the title of your writing) provides no value.

zachlloyd2 years ago

yup, i messed this up, apologies. site is handling the traffic better now thanks to cloudflare

friendlydog2 years ago

I'm a fan of "always loop people in".

Frequent checkins with detailed commit messages including markdown and graphviz diagrams which state intentions.

Switching the flow from a status meeting low detail reponse of "still working on X issue" to a regular feed of detailed information which serves not only as a development log, documentation, but it crystallizes the developer's planning and thought process because they have to describe what they are doing rather than just "fixing the issue" , or "building the thing".

Persistent chat has made daily stand up status calls redundant. Stakeholders can subscribe to channels which have rich detailed information about what is happening at any given moment. For larger groups a resource can curate the channels and provide a thoughtful summary in a higher level channel of different teams progress. Tools like Azure Dev Ops provide meaningful charts, tracking, and velocity, and the deeper conversations on chat linked to work items, wikis, and repo level filea serve to provide an accurate picture for anyone looking into the effort. Leads, and managers can identify trouble spots and adjust priorities or provide valuable insights. Regular demos can also be linked and serve as a historical record of the development direction.

theandrewbailey2 years ago

I'm not sure what IC means. Integration Consultant? Industrial Control?

mLuby2 years ago

Individual contributor, in other words a worker as opposed to management. The author's using engineer to mean software developer; they're the workers in this context.

disposableuname2 years ago

> as both an IC and a manager

When juxtaposed to manager, it usually means individual contributor - someone being managed rather than doing the management.

conro11082 years ago

Individual contributor (as opposed to management)

zachlloyd2 years ago

Correct! IC == individual contributor. Sorry for any confusion

juice_bus2 years ago

I believe IC is "Individual Contributor" in this context.

ilrwbwrkhv2 years ago

A most bizarre terminology the industry has come up with. Almost feels a bit derogatory.

zaat2 years ago

That's the natural way languages develop, offensive terms replaces with euphemisms, given some time every euphemistic term become loaded with the same negative connotations of its origin and new euphemism get introduced.

see: https://thelingspace.tumblr.com/post/114432905996/the-euphem...

Sohcahtoa822 years ago

Better than grunt, peon, peasant, minion, or drone.

alboy2 years ago

Itty-bitty Cog.

chrismorgan2 years ago

I can’t load the page due to a redirect loop: it does a 301 redirect to the same URL. Observed from Australia, in Firefox, curl and Chromium, all under Linux, talking to 66.235.200.155.

908B64B1972 years ago

In this industry we use "developer" and "engineer" interchangeably, but one is not like the other. They don’t hand out brass rats at the end of a bootcamp…

> For early career engineers, it often happens because they lack practice working on teams. They train in school environments where they do classroom projects on their own, or work on long-term intern projects in a silo.

Serious engineering school would have student work together to ship projects.

afarrell2 years ago

Yes, MIT’s university culture does genuinely encourage a collaborative project-based approach. However, some grads will believe that the business world expects them to be as brilliant as Tony Stark and able to “carry a message to garcia”[1]. If a course-VI grad wearing brass rat thinks a request for help/feedback will be rebuffed as impostor syndrome (it happens), they can make the same mistake. Ego is the enemy. The blog post’s advice still applies.

[1] https://courses.csail.mit.edu/6.803/pdf/hubbard1899.pdf which is both historically apocryphal and only good advice when dealing with an impatient and incurious leader.

grumple2 years ago

I'm getting a 500 error when I visit the site.

jackblemming2 years ago

Why wasn’t this caught by a million different processes that most teams have? Scrum, team lead, n different managers, etc. This is on the process, not the engineer.

denimnerd422 years ago

we are probably hiding the work and not looping in those mentioned precisely because it gets shut down

jackblemming2 years ago

That’s understandable. The nuance here is senior engineers going off and doing things they know need to be done vs juniors getting lost in the weeds. If you’re the former, and you’re always shutdown from doing things you know are important, you probably need to find new employment.

3pt141592 years ago

This is a bit of a nuanced topic with lots of shades of truth or context, and overall I agree with the article, but that said:

Sometimes you know your team is going to do the stupid shortcut if you let them and you save them from themselves by solving the robust solution before they have a chance to "be pragmatic" and pointlessly bikeshed about things that don't matter to waste your time. Sometimes you know it will take you a week to do it right or a week with input to do it half right and you just bite the bullet and do it right the first time and, to the articles point, suffer the consequences if or when you get it wrong or partially wrong.

Realpolitik is part of being a senior engineer. Sometimes you make the call to take the shortcut without mentioning it, sometimes you force the full solution with the big PR (or, even worse, a series of staged small PRs to make it look like you're taking feedback); but most of the time, if you're working somewhere good, you get to be completely transparent about what you're working on and the feedback you get is corrective and flexible.

Slartie2 years ago

I have found that the attitude of "just silently do the robust and proper thing immediately and push it, instead of letting the entire team discuss this important infrastructure topic forever in order to ultimately come up with an abomination of design-by-committee-architecture, just to then find out that the remaining time now is way too short to implement it, which is why they then take all the stupid shortcuts to get it done in time, ending up with something barely holding together with duct tape that somehow works for the moment, but immediately tumbles down as soon as the next guy tries to build the next layer on top of it" is a very important senior dev skill, especially at the beginning of new projects when a lot of basic building blocks on which the more complex features have to rest later are still being created.

3pt141592 years ago

Yes, exactly. Again, if you have a good team though, they'll trust you to do the right thing from the get-go because they know you got their back.

TameAntelope2 years ago

The reality is that it's not your call, it's the customer's call, and you need to stop trying to make a decision for the customer. Let them tell you what they want.

JamesBarney2 years ago

> Encourage engineers to get something end to end launched internally as quickly as possible.

Pragmatic programmer called this a "tracer bullet".

https://builtin.com/software-engineering-perspectives/what-a...

AtlasBarfed2 years ago

When you are doing idea creation and getting your head around an idea, I don't know about other people, but in addition to not being well quantifiable and structured (which standups and their tickets need), but looping in other people in the IT industry exposes you when you most look like an idiot.

It's the same reason IT interviews are this big cockpuff show. Everyone is insecure due to a combination of impostor syndrome, constant tech churn undermining your expertise, stack ranking culture, our industry archetype of socially unskilled/introverts, projection of bullying from schooling, etc.

So it comes down to functioning social dynamics in your group: people not trying to elbow other people in stack ranking, helping out, being eval'd fairly, etc.

Things, you know, that IT companies and manager generally aren't good at because technical understanding and achievement is paramount.

pcmaffey2 years ago

The challenging part of this is that knowledge work is intangible and uncertain. Showing progress is difficult, especially with low context. So we want things to be perfect or finished or at least to scope. There's a lot more that goes into our work than commits, PRs, and completed tasks.

Second, "showing your work/progress" should be async. Otherwise, it's taxing for both parties as it requires a request and then some sort of feedback.

People though are generally curious and want to know what others are working on, if they can help, how it aligns, etc. Having that ongoing visibility into each other's progress makes it way easier to build off each other.

What we need is a simple, async way to share progress--outside the scope of tasks or timelines.

xtat2 years ago

Ok advice for engineers who are following orders but definitely an anti pattern for creativity and innovation.

stephenboyd2 years ago

I can’t imagine anyone on my dev team or the others at my company being able to spend multiple weeks consecutively on vaguely defined unplanned work. We collaboratively make a plan with product management covering many weeks of work (PI planning) with some date commitments on milestones we expect to achieve. Anyone spending a more than a few days on unplanned work risks making us need to revise the plan that we all made together, so we don’t want to do that because the opportunity cost is obvious.

TameAntelope2 years ago

I'm honestly surprised Jeff Atwood's excellent blog post about this hasn't been linked. [0]

From his article: "It's effectively impossible to go dark if you're practicing any form of agile software development."

There are a lot of psychological reasons to "go dark", but very few (if any) solid business reasons.

[0] https://blog.codinghorror.com/dont-go-dark/

kinakin2 years ago

We see this with engineers of all ages, but especially with new grads. All have just spent 16 to 22 years working under a model where: you get an assignment, you come up with a solution, you are marked on your result, and then you move on…

Our education has trained us that involving others is something done at the end.

A lot of our new hires need help shifting their approach (and getting over insecurities) to consider that all their products need iterative review well before the work is complete.

throwaway8899002 years ago

My experience has been "Get stuck, avoid the senior engineer because they have no bloody clue what's going on and talking to them actively makes things worse for months afterwards".

mkaic2 years ago

I'm not a new dev (but I am a new data scientist) and can definitely relate to what you said. I'm so used to "if you get stuck, just figure it out" as the norm for things I'm assigned to do, and getting used to "I'm stuck, I should reach out to someone who's more experienced than me" has been difficult. I'm always afraid of inconveniencing or interrupting my higher-ups, even though they never seem to be bothered by it. I guess it's just an irrational social fear.

billforsternz2 years ago

I chronically suffer from this problem. For example I started working on my chess software in 2008 and just yesterday someone raised an issue on GitHub asking me about pertft(). Gulp. Fortunately it turned out my chess logic does pass that very specific, very easy to check correct/not correct test. But it would have been much better to have checked I was building on solid ground 13 years ago!

aix12 years ago

Sorry, what's pertft()?

(Could be a straightforward typo, but I'm not seeing it. Also clearly not important to understanding your point, but I'm just very curious.)

billforsternz2 years ago

Whoops perft() sorry.

emptybottle2 years ago

My experience is different in that large patch sets usually get a “looks good” while smaller sets get a lot of varied feedback.

Depending on what your personal goals are (and your tolerance for accountability should things go wrong) doing the work up front can be a good approach.

redisman2 years ago

I think that’s just because it’s too much work to review so people give up

drewcoo2 years ago

It's about career growth. Most programmers (hope to) peak there.

You know those folks who peaked in high school? You look at them and feel sorry because that was as good as it got for them but tinged with a hefty dose of jealousy because you never had it that good then.

This is like that but in software terms. An individual contributor mostly works up to the point where they take on more than they can handle alone and are sometimes heroic. And some people, some really good ones, peak there.

The crazy debugging live on production servers in the middle of the night that saved millions of dollars or the championship-winning touchdown. Same same. We love to tell those stories.

samjewell2 years ago

I'm amazed that the author doesn't recommend Pair-programming as one of the techniques to avoid "Doing too much before looping in others"

He mentions: > an engineer on a project should never go more than a week without showing something, and usually it should be more like a day

But in my experience by pairing you can shorten this feedback loop to seconds.

A few other people have commented about pairing: It's clear people have different preferences and that it's wise to use pairing at the right moments, but it still seems a glaring omission from the article to me.

quickthrower22 years ago

One way to address is for the manager to make sure the work is chunked down.

Where I see the mentioned problem the most is when teams are too busy. The manager (as in team leader) is putting out fires and does not have the time and/or will to mentor and direct the team members that go off track.

I think it is everyones job to make sure they are not too busy. Being too busy for basic processes is an antipattern and flag that things need to be reprioritised. Someone needs to walk away from the screen (or in covid times towards it) and talk to their boss!

LAC-Tech2 years ago

I've got the opposite issue, and if I'm being frank - maybe it's not such a great look for me as a senior.

But also at the same time... why should we suffer alone? Sometimes something that might take you a day by yourself might take you an hour with another person with a fresh perspective. Isn't it more efficient? Let's loop each other in, often. I'm always down to share screen.

Unless of course I'm the only one oh God I've outed myself as useless on HN...

mjrbrennan2 years ago

Don’t worry you’re not alone! Sometimes I worry about the same thing too. But ultimately I think it’s dumb to struggle along with something for days or working on something that no one actually wants or is going in the wrong direction for days.

Much better to just loop others in early and often so things are done right the first time, and in the most effective way possible.

Ozzie_osman2 years ago

We have a saying on our team, "don't go down the rabbit hole alone".

Honestly I think the reasons mentioned in the article for why this happens are valid, but more frequently, people are a little insecure about their work or a little too much of a perfectionist, and that creates slightly enough friction to deter them from sharing progress or asking for help early on.

cercatrova2 years ago

The mistake is "doing too much work on their own before looping in others."

Can we edit the title to remove these kinds of clickbaity titles?

dang2 years ago

Sure.

trelane2 years ago

Interestingly, I just realized another sphere where this occurs: management. A manager sees some perceived problem, comes up with a policy to "solve" it, and then requires their employees to follow the new policy.

Wonder what this sort of approach would look like for management. It seems like the employees are the "customers" in this arrangement.

taurusnoises2 years ago

Not a developer, like, at all. But, I see this in myself when I work in groups all the time. I get excited about the project, forge ahead on my own, come back with so much stuff, into which everyone else now needs to "fit". At which point the entirety of the collaborative intention is missed.

mjrbrennan2 years ago

I absolutely hate hate hate having to do rework at the end of a feature or other project, so I loop others in with design discussions early and often. I don’t want to get to the end of something only for someone to say “Oh wait I think it should be done this way.” Communication is key.

black_132 years ago

I dont like working with others or rather when I sought out others help I was seen as an impediment to the 10 percent performer. Most organizations reward and the individual scale not group when you tried to work communally you were chastised or all the way punished.

sytse2 years ago

GitLab our iteration value https://about.gitlab.com/handbook/values/#iteration is meant to address exactly this problem

PaulHoule2 years ago

I've gotten in trouble too, particularly in open source projects, showing off a half-baked prototype that doesn't really prove the concept. If you need to win people over and it's a tough fight you need to be in a strong position.

xbar2 years ago

This is really good, but I feel like you should have come to us with this topic sooner.

aetherspawn2 years ago

I think this can be done on purpose though.

In some orgs, if you don’t step around the problem carefully so as to not be “done” immediately with a proof of concept, it might get shipped to the customer from underneath you.

irrational2 years ago

> Throughout this initial period there are standup updates of the form “I’m exploring X, or working through problem Y, but should have something for others to take a look at soon”

What is really going on is the developer has basically been given permission to not turn anything in. They are spending maybe an hour a day actually exploring/working on the issue and the rest of the day they are working on their own pet projects, playing games, watching netflix, whaterver. Heck, they might even spend just one day doing all their "exploring" and then see how long after that they can just show up for standup and extend out the "exploring" phase while doing whatever they want the rest of the day.

salt-thrower2 years ago

I think that's an overly harsh take. I've fallen prey to the pattern the author describes many times, and I inevitably end up making updates like that because I feel bad that work isn't getting done, which fuels a procrastination doom loop of anxiety and avoidance until I rip the bandaid off and hustle to make up the missing work.

It sounds like you've never experienced this, and that's great for you, but don't discount what the author is saying. It rings uncannily true to me, and it sucks when it happens.

nuancebydefault2 years ago

Exactly. It is very easy to fall into the trap the author describes, for junior as well as senior engineers. Managers should ask for feedback early on in the process. This could be a first draft of the architecture or even a simple bullet list of assumptions and considerations. A look at that info by a fellow engineer or a product owner can highly impact the set of requirements, the design or the way of implementing.

leeoniya2 years ago

it really depends on what you're working through.

i do this on occasion while experimenting and thinking through an architectural design. what matters is whether the end result is representative of the time spent on iteration and writing thrown-away prototypes. i will often not start writing code until a reasonable path is formed in my head, and then i may write a prototype that doesnt work out and have to loop back and rethink various aspects. it may take a week with nothing but vague updates in daily standups, but then something awesome to show that has gone through a bunch of private "pre-alphas".

> For more senior engineers, it can happen because they like to work on their own and may be overconfident in finding solutions.

this really only applies if you:

A) dont have a history of delivering quality solutions to non-trivial problems

B) refuse to ask for help/feedback when you actually need it

typically, the rest of the team is working on other things. there would be little value in me pushing various crappy prototypes just for the sake of providing updates that only serve to distract people with information that will be out of date in 24hrs. "too many cooks in the kitchen" is a real thing, too.

schrodera2 years ago

Going dark alone does not very often yield results - even if the right solution comes out getting others up to speed will remove any time gained before easily.

Going dark as a team is a different story.

markus_zhang2 years ago

Actually, if we turn the perspective and look through the developer's eyes, the behavior makes a lot of sense.

duxup2 years ago

Sometimes it is really hard to know that you've been out in the weeds for a while until you're there.

zachlloyd2 years ago

working on the issue with the site going down. more traffic than i expected...

mt_2 years ago

Would you consider that a mistake most engineers make?

globalise832 years ago

I heard it put best as "Don't polish a turd".

retinaros2 years ago

yeah. i agree it is a mistake. but I got many times sidelined or robbed of an idea or a project after starting it and involving other people too early. it happened for instance that I started developing a GDPR tool mentioned it to my manager, he then told me a few days later that there was a manager working on this and it was in the making. the manager in question never had anything on the topic, did not start anything as well. two weeks later he had a power point and hired an intern « to work on this topic » he presented the deck to VPs, every one clapped said it was amazing. I had the full mvp working - demo-able and he was supposed to be the one leading this after this presentation.

so I guess id rather do too much work before looping in others

escapedmoose2 years ago

But I don’t wanna talk to the other kids. :I

louissan2 years ago

error 500 xD

newsbinator2 years ago

> the biggest mistake I see engineers make is doing too much work on their own before looping in others.

eatbitseveryday2 years ago

Thank you... frustrating we do not help by putting the statement into the title and write "bait-like" wording to get clicks and traffic. Now also the server is down so I get no value and no insight.

dang2 years ago

It's sort of a reproductive strategy thing, only about attention. As I say about headline writers in media, it's their job to sex up the title and our job to knock it back down to size.

eatbitseveryday2 years ago

I guess that makes sense. But it is more work for me. And for those who don’t want to or can’t put the time into it (outside of HN) they eat what they are fed.

24thofjan2 years ago

I'm curious about Zach's thoughts on how to use Github. Merge or rebase?

uejfiweun2 years ago

I feel like one of the biggest antidotes to this is just a simple daily standup. My team does this, a daily 30 minute meeting, and everyone says what they're working on as well as any blockers. Seems to work very well in terms of course correction at an early point.

jack_riminton2 years ago

I think because most people give very short descriptions in their standups i.e. "Working on x today, with a bit of y, no blockers". Perhaps due to things mentioned in the article, people don't want to or feel the need to invite feedback

claylimo2 years ago

Where I work everyone will do their check-in but the important part is that everyone has a different personality. Like some people can be more confused and have a hard time explaining or even remembering what they did before so it's helpful to ask questions during their check-in to see if they need help. Some people might work on the same task for weeks. People are often afraid to ask for help. Or, maybe their task needs to be broken into something smaller given new information. The daily check-in is also a way for them to connect with someone else in the team who can actually help them. I'll tell them to either hang out at the end of standup or schedule a meeting with each other.

Having someone leading the standup, if done correctly, can help hold people more accountable for what their progress is toward the sprint goal and remove obstacles. This is one of the responsibilities of a scrum master although you don't need to be a scrum master at all to do this.

zachlloyd2 years ago

Right, we do a standup, but if you're not careful the updates can be generic enough like "making progress on X" where you still end up working too long without feedback

ziggus2 years ago

Why the conflation of 'engineer' and 'developer'? That's a bit confusing.

spmurrayzzz2 years ago

I'm curious, what about that semantic differentiation is confusing for you?

At least in my experience, "Software Engineer" is a standard title for the kind of work the author is describing in the article and is often used interchangeably with "Developer".

ziggus2 years ago

Maybe in your experience that conflation makes sense, but a developer is not necessarily a software engineer.

There are distinct educational programs that differ between "computer science" and "software engineering", and a number of professional organizations are lobbying for software engineering licensure, similar to other engineering professions.

Even Dijkstra knew of the differentation: '"A number of these phenomena have been bundled under the name "Software Engineering". As economics is known as "The Miserable Science", software engineering should be known as "The Doomed Discipline", doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter "How to program if you cannot."'

spmurrayzzz2 years ago

I'm glad you brought up Dijkstra. He's famous (amongst many other things) for coining the phrase/concept "separation of concerns". He considered this to be a fundamental principle in software engineering, giving the field of programming more structure as you allude to in your comment.

But that SoC concept is fairly endemic in a field of folks who self-identify as "developers". The MVC/MVVM craze of the late 2000s and early 2010s had this plastered on every blog. You can call the self-identification mismatch a taxonomy issue, but my original comment is trying to deduce why that distinction matters at all in practice if developers are embracing concepts that we would consider "proper" software engineering.

I suspect the distinction is just noise at this point.

io987632 years ago

I think they mean generally. And I tend to agree. I had suspicions while reading it but wasn't completely sure till I checked the Author's bio on the right. Some, if not a lot, of it doesn't apply well if at all the the "classic" fields of engineering, where engineers tend to be much more focused and trained in their skills.

spmurrayzzz2 years ago

This seems, at best, an anecdotal and/or an arbitrary distinction about what qualifies as "Engineering". Software engineering, as an applied discipline both in name and in practice, has existed since at least the mid-to-late 1960's. And many of the orgs in those days which adopted that title normatively, employed many folks who were "focused and trained in their skills" (e.g. NASA) and worked alongside of those in the more classical engineering domains.

Speaking in my own experience, working closely with hardware/mechanical/electrical folks on a novel product line, they are exposed to a lot of the same subject matter covered in the article. Many of the tradeoffs explored there are absolutely relevant to the older engineering disciplines.

gfody2 years ago

there's no classical software development engineering so depending where you were trained (web startup vs. software company vs. deep in the bowls of a huge corporation etc.) you could have very different ideas of normal - see eg: https://www.stilldrinking.org/programming-sucks

jack_riminton2 years ago

This is the least interesting thing in the article. It doesn't matter.

recursive2 years ago

I've never heard a difference between the two. Your confusion is confusing.