Ask HN: How do I help an underperforming team get on track

34 points by davewantstoknow ↗ HN
Hi HN,

I manage a team of 3 developers (4 in total) and every sprint we either fail to deliver the work we commit to, or deliver work that ultimately fails the QA process. Even though half the team is quite junior (this is their first job) everyone is smart and capable of writing logical, working, and tested code.

Things I've tried: * Reducing the scope of the sprint to something that should be very easy to deliver on (Parkinson's law got us) * Daily 1:1 10 minute meetings with each seemed to be a burden on a everyone and didn't lead to productive conversations. * Creating a rigid structure for the daily standup (Usually a ~5 minute meeting) but people seem to indicate everything is fine until 3-4 days before the end of the sprint.

For a young, scrappy, startup (we're under a year old) I'm struggling to understand if it's an issue of motivation, organization, team, or there are just some fundamental things that need to be fixed.

I would argue that everyone likes working with each other - so "starting over" isn't the first choice for anyone.

74 comments

[ 3.8 ms ] story [ 132 ms ] thread
> fail to deliver the work we commit to

It might be an unreasonable amount of work to deal with. Is it actually a team decision the amount of work that gets set for the sprint, or is it a senior's best guess?

It's also a very strange & distracting time to be alive, it's reeking havok with my mental health, it must be for other people as well.

>Reducing the scope of the sprint to something that should be very easy to deliver on

The scope isn't your decision, it's the team's decision. They should only be committing to

Do three things:

1) Track the work committed to work completed ratio. You want to goal this towards 90%. It's a great metric because it's not easily game-able and it serves your team's interest.

2) Make sure all tasks are broken down into small chunks (no task should be a >3 day worth of work task). If you have a developer who has 1 ticket for the entire sprint then your tasks are too big and need to be broken down.

3) Get the team to commit early and often. It sounds like right now you might be doing "mini-waterfall" whereas you want something more like Scrum. There should be visible progress on Day 2, even if it is just notes on what they are thinking through to implement.

Tell them you need to do layoffs due to covid and worst performer will have to be let go. You will roughly get 3x delivery
I just left a position after being threatened with these layoffs. I was 2nd most sr. in the engineering team and left many incomplete projects. They canned the rest of the team and moved to outsourced labor.

This may be career suicide, just saying.

Sorry, this does not work. 99% of the times. In my opinion.
I must say I never expected to hear anyone actually suggesting stack ranking! I know in the abstract that proponents must exist, but it was still a surprise.
> every sprint we either fail to deliver the work we commit to, or deliver work that ultimately fails the QA process > people seem to indicate everything is fine until 3-4 days before the end of the sprint.

How long are these sprints? I wonder shorter sprints would help flag things earlier. Think about "velocity" as a metric to base sprint length on. How much wall clock time does it take to get a spelling fix into the release? Something that should pretty much always pass QA, peer review, etc. How often is your reworking a deliverable after QA fails it? Those two numbers should inform how you set sprint length -- long enough to get through the release process in the happy case, times enough iterations to reach that happy state.

What are the daily standup status reports like? If you want earlier warning signs, I would suggest a three tier approach: Green, Yellow, Red.

Green: deliverable is on track and expected to be completed on time.

Yellow: deliverable is at risk, but a minor amount of additional information, discussion, attention or overtime can put it back on track.

Red: deliverable is unlikely to finish on time and to spec.

The thing you as a manager/project manager want to avoid is a deliverable going directly from green to red, as it means your team is unable to assess or react. It will probably happen with juniors and new teams, but your job is to communicate displeasure at the event, and coach them privately (during weekly 1:1's) how to avoid that going forward.

Break work down, so it can be done in a day by a developer. Track daily, i.e. switching to Kanban. If someone gets stuck ask another to help them, don't have too much work in progress at any time.
Set the expectation that everyone will demo their work sometime around half way through the sprint. That way everyone knows they’ll be showing something and so will have to think earlier about how ‘done’ they really are, what visible progress they’d like to be able to show, etc. But there’s no expectation anything will be more than half finished at demo time, reducing stress and giving early visibility.
Works only if the work is frontend though. With backend work, there’s usually not a lot to show unless you specifically optimize for making a demonstratable prototype a specific deliverable, which to me seems like just a distraction and missing the overall goal.
Why? If you're backend, show that things are working in the backend, not much different than frontend work. Or show your design work. Or video editing progress, or anything. If there is _no_ progress but in your head, at least what you can do is write it down. Then you end up with a document. Demo your document.

And yeah, if it's missing the overall goal, then it's clear halfway through that we're missing the goal, so you can correct earlier.

I see this argument a lot from folks who never worked in the frontend. Having worked in both it's much clearer there are always ways you can demo changes in a backend. You can show new docs made available or before/after performance numbers of simply just describe what would now be possible for clients.

No matter what you work on there _has_ to be a way to show the impact you had unless you had no impact.

Lots of ways to demo a backend. Are you doing REST? Postman to show the API functioning. Have tests, show the test suite. The person writing the backend needs some way to drive it to test their own work this should be demonstrable to a technical audience.
I agree with the siblings that this isn't true. I've recently finished a big refactor of something entirely back-end with almost no user-visible changes at all (except ahem for a bug I wrote), and I could still present progress. The work was the migration of six or so different components: they used to conform to one API, and I moved them to a different API. I found a way to order the changes so that they could be done sequentially rather than big-bang. Bam: a clear progress marker.

This kind of progress is pretty common, in my experience. I've already written about defunctionalising an algebra before (https://www.gresearch.co.uk/article/defunctionalisation/), and that is another example of a task where the work can often divide itself into discrete chunks. You can show your progress to your team, all without the end-user being able to see anything.

This is a very good idea and fits with what immediately came to my mind; things need to be "proven" or "working" way before the end of the sprint so there is time to refactor, refine, and improve quality.

To the OP, think spikes: https://en.wikipedia.org/wiki/Spike_(software_development). Very important with a lot of unknowns. Doubly important for new engineers because.. Well, sounds like they are dealing with a lot of unknowns.

Have the devs break every project into the smallest deliverable units and for each deliverable have the dev write a plan before writing any code.

What changes need to be made in detail.

In the long term, every team needs a dedicated manager and a dedicated senior engineer who could work on any part of the system. The rest of the team makeup doesn't matter so much but you need this minimum.

If you've got a technical manager who's trying to be the senior engineer, you'll have a conflict of interest in long term quality vs. meeting commitments.

If you have only a dedicated senior engineer you'll have worse relationships with stakeholders and communication out in general.

A senior engineer will help you meet deadlines. A manager will help commit appropriately (to keep same worklife balance).

But you also can't just have two folks on the team because they'd both burn out. So you need these two roles but then you also need another 2-4-6 developers, a mix of senior and junior.

I just left a position where the lead engineer was misleading the team manager and would threaten to get folks fired for stumbling upon the deception. I think team managers need a modicum of technical knowledge, or else there's room for this sort of dysfunction.
Definitely. I consider myself a pretty technical guy. But my job is to be a manager and I cannot focus on good technical decisions when I have to pick between them and getting something done.

My point is that it's not just about skills but which slot you fit in to make sure everyone is representing all the various aspects that lead to good overall decisions.

And as you say, I'm only even talking about the best case where everyone is competent and reasonable.

>> Reducing the scope of the sprint to something that should be very easy to deliver on

Are you telling them to reduce scope or working with them to take some of the work away? Try the latter, ensure they have ownership over the reduction and that the reduction is not prescribed.

>> Daily 1:1 10 minute meetings with each seemed to be a burden on a everyone and didn't lead to productive conversations. * Creating a rigid structure for the daily standup (Usually a ~5 minute meeting) but people seem to indicate everything is fine until 3-4 days before the end of the sprint.

In the standups, you may need to probe to understand what they actually accomplished and whether they are on track to finish the sprint.

> we either fail to deliver the work we commit to

Given how hard it is to estimate software dev (for oneself let alone for a team), I think the speed with which your team produces quality code is more an emperical observation reflecting your team composition and dev/QA processes rather than a commitment you make. Especially so when the team is new and young.

> or deliver work that ultimately fails the QA process

How many layers of QA/QC do you have? For example, you can think of 4 layers: 0) spec/ticket/story author 1) code author, 2) code reviewer, 3) pre-release manual integration QA (by testers).

These are very different activities (eg reviewer may not actually run code but could be able to tell by looking at code that something's wrong) with increasing cost of fixing issues at every layer. If you leave most of your QA to the last step you end up with a lot of hours spent fixing bugs while you could have avoided most of the same issues (and more) if, say, devs had clear instructions for testing their code and a solid review process.

Stop managing the team. No 1-1s.

Don't insulate the team from the product owner, let them feel the pain of not delivering.

Shorten the sprints down to a week to reduce the feedback loop time.

Stop doing commitment based planning, just work through stories in order and get a feel for your capacity/velocity.

Minimise the work in flight, all work on the same story if you possibly can.

Pair more.

Do you work somewhere people put up with this approach? If so, please tell us so that others can avoid this sweatshop.
This is the very opposite of a sweatshop. It's giving a nascent team control over their own success or failure and the quickest possible feedback loop for them to apply their own learnings. If you don't recognise it perhaps you are used to a command and control structure.
Does the development team have ownership over the broad and fine features? If not, I stand by my characterization.

When the PO feels the need to micromanage individual developers so that they “feel the pain”, it’s a disfunctional situation.

Nobody mentioned the PO managing anybody. But of course they own the priorities.

The whole point is to stop the original poster trying to micro manage and in doing so preventing the team from self organising.

You've completely misunderstood.

My advice would be to add more milestones. "People seem to indicate everything is OK until the end of the sprint." Ok -- have them show it off. Have a milestone in the middle of the week (ie Wednesday morning) and have the dev showcase that they've completed it. That'll get UX/QA eyes on the feature earlier and it's harder to just say "yeah, I'm working on it."
How are you measuring underperformance ? How capable is your small team and what level of experience does the team have ? If your team of 4 devs are mostly junior, it is a lot of hard work to get things delivered. Heck, even with senior devs, you have to manage expectations and delivery correctly. In a small startup, things are perhaps too fluid and there is no structure and I am ony assuming that your deliverables and list of items are ever changing on the fly. It is not something a young scrappy team especially with Junior devs. can handle.

You may also want to try and identify the weakest link(s) in the team and see if are not pulling their weights since in a team of 4, even 1 weak link means 25% impact.

(comment deleted)
The fundamental issue is you are trying to manage what you don't understand.

Solution: Find someone who does understand and who is interested in the team's success by giving them equity in the company.

> I would argue that everyone likes working with each other - so "starting over" isn't the first choice for anyone

Where did you get the money to enable this awesome lifestyle of prioritizing people 'liking' stuff all the while you're failing to deliver what you've set out to do? I'd like to get some of it for myself, it sounds really nice.

Two cents:

My bg: Grown engineering teams from 1 person to 20-25 strong and have done this 3 times at various early stage startups. So you know can judge whether this might apply or not.

Depends on people: Are they task oriented / goal oriented ? You can detect based on how they talk about previous projects. Do they say they did x, y, z or do they talk about the big picture of the problem being solved, why they chose what they chose, its features/lack of features etc.

1. Task oriented folks want detailed action items and they don't mind you being super specific. With these folks, have a detailed plan of what to implement, how to implement, break it down into day by day plan. Try to be aggressive w.r.t goals (don't do this, if they are already demotivated), goals that are slightly harder to reach. But ensure that even if they are 60% is done, you will get a workable soln. Ensure that each days tasks are done and checked off and you can track daily progress. Catch up for detailed meetings every 3-4 days. This would be rescheduling of tasks, addition/removal of specific tasks that are no longer valid/requires to be done, re-prioritization/reorganization of tasks etc.

2. Goal oriented folks would want you to give them the vision and overall direction. But watch out for digression that lead to long discussions during such meetings. Tell them what you want to build and why you want to build that, how will the user use it. Then they will figure it out and you can have review meetings. They would not like to you put detailed line by line plans. Ensure you have high alignment during stand-up. Have check ins every 2-3 days to ensure that they are not going in completely wrong directions and you couldn't catch it due to brevity of scrum. But these are usually shorter meetings.

Build their confidence. Review at the end of every deployment what went wrong and what they have to change to make things work next time. Review also what they did well, so they build confidence.

Make them feel like each failure is an opportunity to learn that they need to put to good use for the next deployment.

Build a process that turns your team into an effective team

Optimize for completion of features, not busyness of humans.

Start with ditching scrum. Have everyone focus on exactly one user story at a time until it is complete and passes QA. Once it does, go on to the next one. Every time I suggest this, people tell me I'm crazy, but every time I've talked a team into trying this it has increased their throughput.

There are lots of reasons why this works. It reduces time lost to queuing, reduces crosstalk and coherence penalties, tamps down on Parkinsons Law, and many more.

Crazy people will say sane approaches are crazy. They refuse to think for themselves and don't deserve to decide anything but lunch.
Focus on the work and get involved in it. Pick one task and work through it with your people. Then while doing it and at the end see what went well and what didn’t. Fix what didn’t work and then do the next task. That’s what Agile should be.

Don’t try to create a process like scheduled meetings. That’s just surface stuff. Unless your people are incompetent there must be some deep problems that need to be uncovered. Most likely there is a problem in communication or understanding. Also solicit feedback about yourself and other managers. This may be painful but is often necessary if you really want a better team.

Analyze failures. Write tests to validate functionality on checkin instead of manual testing. Improve CI/CD pipeline. Rigid does not work. Aim for flexible. Don't be an MBA, practice MBWA (management by walking around). Gradually seek to introduce a culture of overtime is required if the team fails to deliver major time-critical deliverables and these goals have a clear purpose. Nothing worse than arbitrary goals.
> Analyze failures

I think this is all you need really. You can timebox (sprint) or iterate or whatever but have the discussion on (a) the cause of the problem and (b) how to avoid it in the future. (This is ISO9001 in a few words)

> every sprint we either fail to deliver the work we commit to

Stop committing to so much.

> deliver work that ultimately fails the QA process

Stop committing to so much.

> half the team is quite junior

Stop committing to so much.

I see you tried that, and Parkinson's law got you, but it might be that the team needs several sprints to catch their breath and also change the way they work.

> people seem to indicate everything is fine until 3-4 days before the end of the sprint

Sounds like they are afraid they can't be honest. There's something going on there.

Just for a short term experiment, you could shorten the sprint to 1 week.
Sure, that would be revealing at least.

2 days to get ramped up, update tooling, dependencies, database snapshots, docker containers, etc. Do all requirements gathering, investigation, and design work. 2 days for code review, testing, handling bouncebacks. 1 day to deploy and do retro.

Oops. Forgot to allow even one single day to do the actual development part of the work.

One of my teams did one-week sprints and it wasn't as you describe.

If that scenario is true, then the one-week-sprint did its job - it exposed the problems that need to be solved. That's way too heavy of a tooling/process burden.

Commit to deliver only one thing in a weekly long sprint. Insist on written specifications prior to acceptance into a sprint, including finalised wireframes. Expand from there.
First, sprints are dumb. You don't hear Usain Bolt running sprint after sprint, right? Second you have nobody that is senior. Yes expensive. But as you can see cheaper than the current situation.
> every sprint we either fail to deliver the work we commit to

Are you committing too much volume? Too much complexity?

You say that half the team is quite junior: I have found that junior developers often have a more difficult time judging how long something will take more than they do actually shipping a feature. They haven't been through the weeds like senior developers so they don't have that experience of "okay, well this can go wrong this many ways" yet.

> deliver work that ultimately fails the QA process

Hearing this makes me think that it's a complexity problem, tied in with bad estimates.

It sounds like you're committing to too much complexity and doing that with too much volume. Reduce scope, reduce volume and I think you will see better results.

Agreed.

I will add that juniors must be taught to test. In my experience they always think that they need to ship, especially when the manager is pushing and setting deadline. The job of the developers is to deliver working software (this involves testing), not to ship code ASAP.

You test before shipping. Do not deliver something that's not been tested, if you don't have time to test you don't ship, shipping can always wait.

Makes me wonder if there is a deeper issue with the environment (testing tools? business complexity?). Complexity should be reasonable, we're talking startup from scratch, not 10 years old legacy code? Can they run locally? Do they have test data and a test environment?

The first question I would ask is how hard are the simple things? Does your environment make it easy or hard to ship software? At the end of each sprint ask the things which slowed you down. Then ask if it's worth devoting time to removing friction in the next sprint. If you're failing QA then understand why and then automate it (if possible or feasible).

Junior developers struggle with estimating time so you are going to have a period where they are learning now to estimate how hard something is. Be open about with the team and your management. Explain to them why it's important that you deliver what you promise (dependability).

The other big gotcha is how much time are you spending working on features versus working on the things which enable those (such as testing, monitoring, clean APIs, refactoring, deleting dead code)? If the bias is too far towards features then you'll collapse under the weight of your own tech debt. I've had situations where I had to tell teams to stop working on features and fix the foundations.