Hacker News new | past | comments | ask | show | jobs | submit login
How To Do Less (alexturek.com)
413 points by ggoodale on March 13, 2022 | hide | past | favorite | 71 comments



I'm currently reading through Johanna Rothman's "Manage Your Project Portfolio" and related literature and a bunch of this resonates:

* Finishing work is more important than starting it

* Teams working together on a single priority ("swarming") seem to be more successful than teams where each person is doing 1-2 things on their own

A few subtle points in this article that made me think:

* Keeping existing features working as well as customers expect is a great zeroth priority but it can be hard to know what customers actually expect. Absolutely the worst is when you carefully maintain a very reliable, feature-rich thing that no one particularly wants or uses. In an org without a dedicated PM, I'm never quite sure how to account for time spent on the product-management work of "listen to my customers about what they want from my service".

* The article talks about engineers and stakeholders caring about "project X" and "feature Y". A bunch of literature suggests that anyone who is thinking this way is probably a bit lost -- they have lost sight of the business outcome that the team's work is supposed to be getting (more sales, quantifiably happier customers, fewer pager alerts interrupting engineers, whatever). If you can tie particular features/projects to outcomes maybe you can make it easier to explain why you've prioritized other work first (it makes bigger outcomes sooner).


It's also worth noting that another way to reduce the cost to maintain your existing functionality (priority 0) is to actively _remove_ rarely-used or less valuable functionality


> Teams working together on a single priority ("swarming") seem to be more successful than teams where each person is doing 1-2 things on their own

It's an interesting one, same as e.g. pair programming; people (and I'm speaking for myself but I'm sure others will agree) prefer to work alone, because software engineering is difficult, brainy work, whereas swarming and pair programming are social activities. If you're like me - introverted, probably on the spectrum, etc - it's something that is well out of your comfort zone.


I think this is not referring to swarm-, or pair-programming. Think of it as the team focusing on a single feature/problem at a time. It just means the team going in the same direction.


> Teams working together on a single priority ("swarming") seem to be more successful than teams where each person is doing 1-2 things on their own

I wonder if there is a reference supporting that statement. I believe it, but it would be nice to have a reference.


You can figure out if people use or care about your service or not via observability.


Disagree. If you followed observability no text editor would do more than Notepad


most text editors aren't services though?


In my experience/opinion (disclaimer: small teams only) this single-item paradigm misses a lot of opportunities. I prefer the 60-30-10 approach (see https://minimal.app/603010) as it is more experimental/open while still capturing great focus.

To back that up, I’d like to acknowledge that almost all significant contributions I’ve witnessed weren’t the top priority item (instead, they’re some weird experiment). I am generally suspicious of the human ability to form a hierarchy of needs/opportunities, so I try to favor qualities like experimentalism, curiosity.

Of course, this is all circumstantial. I’m sure some teams have hard deliverables where there is little value in exploring or doing things with no known measurable impact.


It depends on how well the organization understands priorities, whether it does so consistently and how it is organized.

Sometimes the business priorities and your chain of command priorities don’t mesh. That’s a good reason to be able to focus on multiple things.


As a self-employed person, this is essential. I'm constantly using Things3 to take down notes on ideas for things I want to do, or could do. But there's only so much I can do in my waking hours. So when it comes time to "prioritize" and make my plan for the week, I throw everything that's not on fire in a secondary list called "brain vomit" that I simply never look at, while filtering out the important and urgent stuff to the main actual list of things I'm actually going to do.

This probably sounds insane but it's working for me. I think part of the reason is that I often don't have the mental bandwidth (or discipline) to recognize at the moment of task creation whether something is a good idea or not. I'm simply moving too fast, multitasking too much, to make those calls. So I batch every new idea into the inbox and review it later. And even if I discover good ideas in there later, if they aren't essential to my work or life they go in the brain vomit folder. So I get all the satisfaction of stream of consciousness "ubiquitous capture" (a la GTD) without the emotional burden of having to actually do all that non-critical stuff.


That's interesting to hear about the inbox for quickly capturing thoughts, including brain vomit.

Over the past few years I've used a similar convention, first called Journal, then Stream, then finally Archive. Everything goes in there, added to the bottom of the file: snippets, ideas, links, both personal and work-related stuff. I have a shell alias to append one-liners from the terminal, which I use throughout the day (and night). I review it regularly to move the important parts, especially plans and actions:

  - Archive

  - Do

  - Doing

  - Done
I like that the folders sort alphabetically, and also in the order of how things flow.


That reminds me of a "kanban board" with: Backlog, Ready, In Progress, Complete.


brain vomit I like it


AKA brain dump.


> unless you work at a 10 person company, the CTO has less context than you about reality “on the ground.”

From my experience people "on the ground" often miss out on the strategic long term goals.

Neither my take on it, nor the author's approach will be the silver bullet. Both are too extreme. And might appeal to different audiences on paper but not survive reality imho.


This is the result of the "Us vs Them" mentality that so many developers have these days and boils down to a lack of trust.

If your CTO lacks context about your reality on the ground, then tell them the context. How else can they readjust what the priorities are? If you tell them and they refuse to adjust your priority then it's probably you that lacks context about what the goals actually are.

If you still disagree with that, then it's because you don't trust your CTO. If you don't trust your CTO then you should leave and find a better one.

If you have worked in a few places and have never trusted the CTO anywhere you have worked, perhaps you need to sit down and take a hard look at your yourself rather than others.


I think its the power dynamic. Not everyone can just leave jobs. If people don't trust their CTOs, bosses, CEOs, that is mostly the bosses fault and on them to fix. Requiring the person who can be at-will fired to also manage upwards is pretty much a fail state.


Not managing upwards is how you wind up in a fail state. Business, teamwork and employment isn't a zero sum game. Everyone is working together to achieve something. Helping your boss understand why something shouldn't be done/prioritized/cancelled is paramount to being efficient.

If you think you can never tell your boss no because you'll be fired, you're not going to have a good employment story.


It's the boss' responsibility to make it safe to say "no". You can't expect the more vulnerable party in the relationship to take the initial risk when there is a power imbalance.


If your stance is that the weaker party can take no risk because they're the weaker party then you'll always be a victim.

Work _with_ your boss, not against them. You have more agency than you realize.


Spoken with the cheerful idealism of a person who has always had a safety net.

My stance is that you cannot pretend the power dynamic does not exist. Boss can fire worker, worker cannot fire boss. Consquences of getting fired range from irritating to life-threatening, depending on worker's resources. Consequences of having to fire someone... not such a problem. You ignore that reality at your peril.

If the boss wants workers who can say "no", the boss has to create an environment where people don't have to fear the consequences of doing so.


There's a area between "power dynamic is everything and I can never say no" and "power dynamic does not exist and I can always say no" that I'm arguing from.

Power dynamics can't be ignored, but just because someone has the upper hand in that dynamic means you always have to be subservient and do everything they ask you to do. Always saying yes to a boss is probably a faster way to get fired than being a partner and pushing back when needed.


Sounds like we actually agree on this, we are just emphasizing opposite ends of the scenario. Sorry to have claimed that you did not understand what I was talking about. I've had some painful life experience which leaves me a bit sensitive here.


We're all human :-)


Its about how _much_ information you give your boss. And when. When the power balance is even, the flow of information can be, too. But given the relationship of employment, it can never be. So its still on the employers/the powerful.

If you give it away for free, theyre not going to voluntarily pay you.


There’s very few situations in which dropping a feature that was previously ‘highest priority’ midway through makes sense.

More likely, you finish up fighting the latest fire and someone will suddenly remember the thing that is now ‘very late and behind schedule’.


Why would you ever give a developer a task without ensuring they understand your strategic long-term goals? That sounds like a sure-fire way to end up with a product that doesn’t match your vision.


There’s plenty of work (possibly a majority of it) in the industry that can be of the form “take a ticket, do the ticket, close the ticket”. Someone in the cascade has to understand the strategy and product vision to ensure you get a good overall outcome, but it doesn’t have to be the 22 year old SWE-1.


My benchmark for this being wrong is that military briefings don't do this if they don't have to.

The gold standard for a military briefing is that it includes a high level overview of the global, regional and local situation before getting into specific orders and this was adopted because small unit doctrine depends on unit commanders having enough context to make informed independent actions in lieu of direct chains of command being available.

Everytime I've watched a ticket languish in any organisation, it's always because people don't feel a need to give context. They think they understand what they're asking for, it doesn't match reality and then the back and forth culminating in a bunch of calls and finally someone explaining the goal happens.


I wasn't in the military and my knowledge stems only from others' personal accounts and what I read about it.

I agree for the need of context. Because only then can the operative understand why it is important what they are doing and in case of decisions to be made on the ground either decide or clarify with the org structure.

I know that unit commanders are being (ideally) briefed like you described. But how does this context trickle down to their people? Does the military have a means to ensure the passing down of relevant and qualitativ information?

Because that is what I personally see as a problem more often than not. The information is lost at the lower rungs of the ladder.


By believing that the goals are already clear.

By believing you don’t need to repeat yourself about what the goals are.


Tell my manager (the CTO) that.


> From my experience people "on the ground" often miss out on the strategic long term goals.

This has been my experience too, having been an engineer for the past 3 decades and to this day.

And even if the CTO does a great job of communicating strategy, we on the ground tend to get lost in the weeds just because of the nature of our work.

I think outright saying “no” because we don’t think it’s hight priority is a dangerous move that makes the team a target for future performance reviews.

We should, instead, find a common ground and sell our priorities rather than impose them.


Explaining and communicating the strategic goals is the job of the CTO. They're adults, they can deal with being told "no". And changing priorities due to strategic shifts shouldn't be happening frequently.


Here are my key takeaways:

1. Say no a lot, up front

2. As early as you hear anybody else’s plans that involve your team doing something new, interject with a clear No

3. Everything your team already owns (that actually matters to your customers) needs to approach 0 maintenance costs

4. Ask your team what the biggest maintenance costs are

5. Write a Maintenance Roadmap to reduce your team’s costs

6. List all the new things you’re currently doing or planning to do, and put them in the New Features roadmap doc

7. Dig into your data, figure out where the drag on your team comes from, and drive it down

8. Drop everything except the top item on the list


My priority is always decustomization.

Anything that makes me think of the words "Bespoke" or "Artisinal" or worst of all "A perfect fit to the project needs" is where I look first for problems. I also look at anything that provides multiple ways to do the same thing.

The JS community understands it better than anyone. At the application level, any program, be it amateur or professional, is almost always readable and maintainable. Because there's no interesting algorithms, no abstractions you haven't already seen in a design patterns list, and just generally nothing special about the code at all. They use libraries for everything.

When you stop trying to write interesting and beautiful code, and stop trying to innovate at any level below the application, stuff gets a lot easier.

Of course some projects really do have interesting technical challenges... but so many projects don't.


> The JS community understands it better than anyone. At the application level, any program, be it amateur or professional, is almost always readable and maintainable.

Oh man. We have worked on some very different JS applications.


Maybe a better way to phrase it would be "Half the JS community understands that better than anyone, and the other half diarrheas out endless tiny useless frameworks and tries to get you to use them, but lets pretend that's not an issue".


Yes there’s that as well. But I have seen plenty of the type of code bases you’re praising that were a nightmare to maintain and debug.

Everything is a trade off. Most developers probably shouldn’t write their own database engine. But at the same time adding another dependency to handle padding a number with zeroes is overkill.

In practice after 2 decades doing this, I’m much more likely to run into an over reliance on libraries these days than the other way around.


Left pad was more of an issue with mutable dependencies it seems like, and with using tons small dependencies instead of larger trusted ones.

Yarn's zero install and the like could probably have stopped that from ever being an issue. Many lodash/underscore/whatever utilities have that feature, and with dead code removal I don't know why people still use micro libraries.

There's of course malware concerns, but that's why you don't use things that aren't popular with a million eyes on them unless you want to check it yourself.


> using tons small dependencies instead of larger trusted ones

That’s certainly not what the JavaScript community as a whole does. If anything that’s closer to the way many other languages do it with large standard libraries.

> There's of course malware concerns, but that's why you don't use things that aren't popular with a million eyes on them unless you want to check it yourself.

Those popular libraries often have hundreds to thousands of dependencies and sub dependencies themselves, many of which almost certainly don’t have a million eyes on them.


Great article and thanks for sharing; great applications in one’s personal life too. The author is very focused on hows of managing expectations of the technology team, and would love to hear his/her thoughts on how to manage expectations with the business.


This is the authors take on that:

“Here are some concrete ways to tell management or stakeholders no.

This isn’t MAIN_PRIORITY, so we aren’t going to do it until at least ESTIMATED_DONE_DATE.

Right now our priority is MAIN_PRIORITY because of ONE_SENTENCE_JUSTIFICATION, and this is 100% our shipping focus.

I agree this sounds like a really useful feature - once we finish MAIN_PRIORITY, should we consider dropping SECOND_PRIORITY and do it?”


The prioritization tip reminded me of "Final Version" productivity system that I personally like. It's just one big-ass list of everything and you pick and do stuff at random (more or less). Yes, it sounds silly, but I found out that it works better than constantly re-ordering goals. :-)

http://markforster.squarespace.com/final-version-faqs/


Mark Forster is a hidden gem!


This could be a guide of "How to quickly get on the wrong side of a CTO".

Seen it happen.


What should someone do differently to have a more realistic workload?


If history is any guide, commit to X, deliver X/5, then start Y. There's always time to fix stuff, never time to do it right.

A project manager inadvertently laid this out for me when I was new in my career; he didn't mean to put it like this, but this is what came out. (Note that I'm a software developer, and at the time the software I wrote was not "shelfware", but rather installed into big enterprises' data centers. Pre cloud)

NO ONE wants software done right the first time. Because, when you slam the happy paths out there for the customer as fast as you can:

* Sales wins because they can claim "Feature X" being sold and get their commission

* The customer wins because they get to complain about x or y being bad, incomplete, or whatever they want to whinge about and feel like they're part of the solution

* Customer Support/Sales Engineering/etc wins because they get to appear to be "responsive" to the customer by quickly reorganizing ongoing work to take care of the "urgent need"

* The Project Manager wins (2x!) because they can now a) do the same "response" dance for the C-levels, and b) berate the software development staff and show their authority and working under pressure skills

* Software Development wins because they can now work on the secondary features, fixes, "skunk works" tech debt, etc. since this is now more important.


I don’t mean to attack by going through these points, but would like to share a different perspective.

> Sales wins because they can claim "Feature X" being sold and get their commission

That’s true even if the product is high quality from the get-go, isn’t it?

> The customer wins because they get to complain about x or y being bad, incomplete, or whatever they want to whinge about and feel like they're part of the solution

I‘ve seen contractors, big and small, fired for providing complain-worthy software, multiple times. Some (most?) customers have enough on their plate and just want working software. Take Apple as an example. Their software quality seems to have worsened considerably in the last decade, but I don’t feel this has made myself more inclined towards buying their products. Infact, I‘m frustrated and have considered switching to other tech more than once.

> Customer Support/Sales Engineering/etc wins because they get to appear to be "responsive" to the customer by quickly reorganizing ongoing work to take care of the "urgent need"

I agree, support staff actually needs bugs to occur or else they will be scaled down. What’s the business case for having a huge support team though, if shipping high quality software is an option?

> The Project Manager wins (2x!) because they can now a) do the same "response" dance for the C-levels, and b) berate the software development staff and show their authority and working under pressure skills

Why not, instead of working on authority and under-pressure skills, let PMs grow as leaders insider their team who can inspire hard work when the rubber really needs to hit the road?

> Software Development wins because they can now work on the secondary features, fixes, "skunk works" tech debt, etc. since this is now more important.

As an engineer I‘ve found it more satisfying to deliver great code instead of having old hacks thrown back at me, maybe with added time pressure because there’s data loss involved.


> That’s true even if the product is high quality from the get-go, isn’t it?

I think the point was that claim can be staked at an earlier time if you shovel out some “mostly works for happy path” code than if you wait and ship high-quality code as the initial (but later) delivery.

> when you slam the happy paths out there for the customer as fast as you can…


How depressing. This would seem to suggest that this is not a good industry if you like producing quality work, but is a good industry if you prioritize being able to blame other people for something over getting it right.


z) Customers are gonna complain anyway and ask for more, so better make 80% of the feature and see what they focus on.

z’) If we deliver 20% of the wrong feature, the customers are going to say it and we can reorient before we make the other 50%. #Agile

I’m not very satisfied either but the history of programming is riddled with us building overengineered solution to the wrong problem.


My background (and experience) might be different than many here, but I've worked in dev orgs that specifically did the every-6-months big-bang release to a customer, with the BigDesignUpFront, waterfall, and all that. There were some wins here:

* Customers signed off on requirements; they may not have liked them, but they knew what was coming. And when.

* The dev org got to have the (IMO important) psychological journey of discovery, creation, testing, "oh shit", last minute fixing, last second covering up, and the final human release of... releasing. Big celebration. Yay, we did it. My last couple positions have been SAAS stuff where we "release" tiny little things multiple times a week; sometimes multiple times a day. Honestly, it's a grind. There's no "big win". It's akin to "death by 1000 cuts". You don't have the big wins or the big losses, but you get ground down by the never ending stream of small stuff. Writing an app is like putting yet another pat of snow on the snowball.

I get where agile is coming from, but a lot of times it fails to recognize that sometimes, people actually DO want to be surprised with big things, even if they're not 100% positive. And sometimes, customers DO want to have the vendor "Just deal with it and leave me alone - I can't be bothered multiple times a month (or week!) to look at your teeny little new thing. SHOW ME THE FEATURE WHEN IT'S DONE." They WANT that ability to gripe all at once in the end, and not be part of the "steering committee - what am I paying you for if I have to dictate everything?"

I'm being hyperbolic here of course, but I've seen versions of this play out numerous times.


Not celebrating is a cultural issue. Even if you ship a thousand new things a week, you can still take time to celebrate those. It's your (or your team's) choice not to.

One good example is Linear. The product improves day by day, but they also publish a regular (weekly) summary of the changes. And for me as a user it's a delight to read through them. https://linear.app/changelog


I don't think a client-facing changelog tells us much at all about how the dev-team celebrates.

Calling it a cultural issue seems off. Perhaps in some cases it is. But if the process truly is a grind, then the only target left to celebrate might be a proxy metric that the devs don't relate to. (Congrats on staying within 0.5 sigma of our mean time to deliver this week, let's have a pizza.)


Celebrating doesn't have to be a reward, and assuming that celebrating a release involves a material reward is certainly cultural. To me, the important part of celebrating a release/milestone is pausing and reflecting on what has changed. That only needs to be a small nod.


> There's no "big win".

Even though you are shipping piece by piece, don't you still have a "big win" that those small pieces make up to be to celebrate? For example, my old team had to deliver MFA. This was broken up and was "released" continuously. We celebrated when the whole feature was "done".


I'm not sure. The business unit is always demanding more. I don't have a solution for that.

I just know enough from my brief stint in management that always saying "No" is a great way to get people to say you're "difficult to work with" or "aren't a team player".

That was a hard lesson to learn: "team player" means different things at different org levels.


You aren't saying "No", you're saying, "What drops?"

People who say, "No." are being hard to work with. People who engage honestly with the CTO who is trying to change priorities is someone who you actually want on your team, the only kicker here is that the conversation ends with, "Okay so what gets shelved for this new thing we've been talking about, or should we finish out what we're currently doing before jumping on this?"

There is a lot of advice out there that says, "Say no!" but you can't take it at face value; no reasonable person is suggesting you respond to a request from leadership with a single word answer. You need to have a higher EQ than that, but what you can do is find ways of explaining the cost of what they're asking in a way that is effectively no, without actually just saying one word and then refusing to elaborate.


> what you can do is find ways of explaining the cost of what they're asking in a way that is effectively no

What's good about that is that your superior may want to actually eat the costs because he may have information that he has not shared yet with you.


Every IC and manager needs to just learn to say: “yes we can do that, the sprint/quarter/whatever is already planned full, what would you like to remove to fit the new priority in?”


Being a team player at every company is different too. That makes it hard to give general advice. But I think that "learn to prioritise, communicate priorities and default to no" is most useful advice than "don't say no to your CTO."


For what it's worth, the author's CTO is the one that shared this article ;)


Former* CTO. That is no longer accurate


It sounds like this is just an exercise in, not learning, but being forced to say "No" (a lot) out of a need for mental survival...in a work culture where priorities are constantly shifted (and this is the key).

Instead, foster change where you can say "Yes, and" or "Yes, but", where there is a common understanding that sure we can work on it, eventually, as it's going into the backlog, that will need to be prioritised, or it goes at the bottom of the queue as any new thing should - as what is already in the queue, should already be prioritised.

Obviously what is already in the stack can be shifted around as the business needs may necessitate the change in priority...but popping shit at the top of the stack constantly...that's not where you need to learn to say "No"...that's where you need to learn to say "Bye".


But what about Engineer FAANG: Who will get promoted based on individual impact?

I've found convincing everyone else an engineering team needs to focus doesn't take too long. Managers are not shocked or confused to hear that a team drowning needs to do less.

The individual engineers though, those can be the hardest. How does management split credit for group effort? Will the leader of the project get promoted, even though their contribution may in total be less than others on the project? What happens to my ongoing work, will I get skewered in "calibrations" when other teams talk about how I dropped everything to work on something to important to them?


Thanks for sharing. I like how you provide text snippets for potential responses, as communications & stakeholder mgt. is something junior people often struggle with (not taught much at uni).

Delivering one feature at a time may neither synch up with org roadmaps or go down well with mgt. expectations, but that depends where you work; I can see your approach might work in a smaller organization with overloaded team, where it may be a tool to create laser focus.


This is one of the best articles i can recall reading in a while. What a great piece.

The third how to say no copy/paste example is poor compared to the first two.


"So now, you’ve committed to a big, one-time effort of saying No to everybody. "

assuming you have the luxury to do that.


One interesting thing I learned from the book "essentialism" is that the word priority used not to have a plural. It described the single most important thing to do.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: