Live data from Hacker News

How should I behave as a developer in a project that's headed for failure?

programmers.stackexchange.com

41–50 of 163 posts

Re: How should I behave as a developer in a project that's headed for failure?

#41

I found it interesting that his list of reasons why the project might fail sounds like pretty much every project I ever saw in the 1990s and early 2000s. Although some of them are definitely bad signs, some are just par for the course in organisations that arent big on software development. I wouldn't say its a guaranteed failure. He might just be unfamiliar with what real-world projects are like in an enterprisey en…

Enterprise software development. Plan, plan, plan, plan, execute, fail, extend, extend, extend, deliver. The PMs job is to get the project extended from day 1 because nothing was planned out correctly.

Re: How should I behave as a developer in a project that's headed for failure?

#43
post #22

I was fortunate enough to experience this exact kind of death march over a period of around 18 months. Unless you have the authority to guide the project back on track, there are only so many options available to you: 1: Document your concerns and any problems you've identified. Be objective wherever possible (i.e don't bitch about your co-workers even if the reason the project is failing is because they're fucking i…

make sure there is a paper trail Unless the situation results in criminal prosecution, when the time comes to use that paper trail nobody will care about it.

> Unless the situation results in criminal prosecution, when the time comes to use that paper trail nobody will care about it.

That's true. Pointing to your paper trail when the shit hits the fan might actually label you as being uncooperative during a critical project; most likely, the manager doing any personnel "cleanup" will be the same that was responsible during the project (line manager vs. project manager). Besides, if a project is doomed, you are not the only one to notice it, so the fact that you pointed it out does not single you out as especially perceptive.

Re: How should I behave as a developer in a project that's headed for failure?

#44
post #35

Earlier quoted context omitted.

make sure there is a paper trail Unless the situation results in criminal prosecution, when the time comes to use that paper trail nobody will care about it.

> nobody will care about it. I disagree. If the company in question is large enough having documentation that you were actively trying to avoid disaster, were competent enough to raise concerns and suggest solutions, etc. can be helpful when people come trying to assign blame after the fact. If the company as a whole will survive the impending train wreck then having evidence of competence, however meager, is certain…

I'd like to hear from anyone who kept a paper trail which was, in fact, used as so intended. I'd also like a show of hands where it was kept to no avail.

I've been on a lot of projects. Where a paper trail seemed warranted, those who came to assign blame had already chosen their targets without consulting with them first.

Re: How should I behave as a developer in a project that's headed for failure?

#45
My two cents:

Ask for proper priorization and focus on completing as many features as possible, one after the other. It's far easier to build one feature while maintaining multiple others than to build multiple features at the same time, especially with a lot of legacy code.

If they can't prioritize at this point, insist. Point out that in this situation where everyone is stressed for all the possible reasons, with proper priorization you're far, far more efficient than without. For all you know, you can be done with individual parts within hours if you can safely scratch other, less important features that are also in development, only to take them back up and running the next day as they become in turn the highest priority.

If they still can't prioritize at this point, prioritize yourself.

If you don't know it already, find a customer relationship contact and ask for one of the main timesinks for the users that the product is supposed to solve. Let him describe to you the usecase, or let him point it out to you in the functional specs, and do it from start to finish. This one has to work, and that's your new goal in life. Be proud when it's completed, your grunt work is done. Show it to your boss, and let him know that's what requires integration testing right now. Your new goal in life now, is to make sure that this usecase is viable in production. You will find new issues, encounter new problems, but these are better problems because they are not entirely up to your team, they are the kind of problems that a lot more people can understand since they are not purely dev issues. You will get a ton more help at this point, a ton more understanding, a ton more visibility on the project, and management will be able to make a much more informed decision about the so-called deadline.

The key to proper "failing" of a project is to never let it be a complete failure. Finish a usecase and deliver it, so that at least someone could get added value from what the project committed. This is how the customer & management should prioritize for you: make sure that there are usecases where the product is fully functional from start to finish.

Re: How should I behave as a developer in a project that's headed for failure?

#46
I've picked up so many of these types of projects, it's sort of become my specialty.

The first thing to do is to ask oneself if it's worth completing the project at all. All stakeholders _will_ have to be ready to make some sacrifices; is it worth it? Also, like others have said, communication is key. If the team can't have open conversations up-front, it may be best to walk. But, if the team can communicate openly and most are on-board for an adventure, then there are things that are possible.

This is also where a team 're-org' may have to happen, unfortunately. At this point, there may be a huge amount of internal tension that's probably slowing things down. This is a very difficult task, but identify those who have become burned-out and/or antagonistic. Sometimes it's better to cut the team down from 5 to maybe 2-3 instead of adding more people. Is there a 2-3 person team that works most effectively together? The others who are 'cut' will have bad feelings about this. If possible (it usually is), get them on part-time contract and affirm that they are important to succeed (they probably are). Let them cool-off and slow down and mediate conversations with them to use their existing knowledge most effectively.

Don't think about the sunk costs. This will just depress you. Instead, think about all that you have (e.g. knowledge, code, documents, connections, relationships) as resources to help you get to a destination.

Redefine the destination. Take an honest inventory of your current state and distance to the destination. Where can you realistically get to, with a best effort? Which promises will have to be broken? Which ones must be kept. This is going to irk some people, so it's going to have to be very calculated. Sometimes this means just finding a way to get the ship to a close port, if only just to refuel.

If there isn't one, stand up an automated test harness with as many tests as possible, in the shortest period of time. If you can find a 3rd-party tool that's easy to set up, use it. But, you may have to write some throwaway code just to get something working. Don't worry if it takes a day or two to get going, it will be worth it. Shoot for broad tests, rather than unit tests, at first.

Divide and conquer; Isolate and build out from the solid parts. Which parts of the system can be hidden behind a black box interface and add value? Which parts of the system are so rotten that they have to be re-written? Slice the system up into pieces and remove the bad ones. Unfortunately, this requires a bit of skill, art, and talent. I most often deal with systems in OO languages. So, it's quite easy to apply a refactoring interface/factory pattern to things. The really rotten parts can even be replaced with mocks for the short-term, if an interface can be defined. Another thing: the Pareto principle. Re-write the 20% of the system that is creating the 80% complexity.

Aim for early, easy wins. Shrink the development cycle. Show some forward progress. That will help revitalize the team and add momentum.

The gut feeling for a lot of people in this type of situation is to 'brute force' it. People get addicted to 'putting out the fires' But, that's completely the wrong path to take. Come up with a new plan. A plan that can be done with everyone working 40 hour weeks. Let some of 'the fires' burn, but contain them. Don't lose hope, and instead use brains.

However, in the end, it is also completely ok to walk away, especially if there's no incentive to continue.

Re: How should I behave as a developer in a project that's headed for failure?

#47
post #30

Honest, "be slightly evil" answer: say absolutely nothing. Just work. Get done what is asked of you. When you have free time (which you often will, due to the chaos as things start to shake) use it to build skills for your next gig. People will probably lose jobs. Sometimes that will happen based on seniority and sometimes it's just random. Sometimes, that will happens to the PITAs who spoke up and happened to be rig…

With this behaviour probably you will survive this project but in the long run, you will be wasting your life and maybe miserably unhappy in the end.

"Do as you're told" and "Don't talk back" are probably the worst "rules" I've been taught in US grade school. Following that mentality will net you exactly this: a miserable and close-minded life.

DO voice your opinion and professional expertise.

DO make recommendations as to how to salvage or improve a project. Not doing so will not get you anywhere.

Re: How should I behave as a developer in a project that's headed for failure?

#48

Communicate your concerns in the most concise and non-confrontational way possible up the management ladder. Summarize the risks, but do not try to impose your conclusion on them. Management must always have the choice of what to do, but it is your job to assess and communicate the situation. Use email, so as to leave a paper trail when things go south. I hope future historians will be astonished that all of us chose…

I've had employees try to the "build a better solution" approach behind my back. The big problem with it is that it assumes the person actually has the full picture. In a small project, that may be the case. But often it isn't.

In the case I have in mind, said employee delivered a solution that did in fact do most of what our current solution did very well with little complexity. But it utterly failed to account for the strategies that were in place for future functionality, that placed very different requirements on the platform. As a result his solution was of no value to us.

There was serious discussion about terminating said developer because of the amount of time he'd wasted on that, and the discord it created in the team when he tried to push his "solution" as an alternative to the existing system.

Often the direction is set by managers for good reason: Sharing every bit of detail would paralyse even relatively small organisations.

That's not to say that skunkwork projects like that can't work or be beneficial, but in my experience the odds are high that they will overlook something important. Before doing something like that, the developer should at least put in a lot of effort to try to learn exactly why the current project is the way it is.

Re: How should I behave as a developer in a project that's headed for failure?

#49
post #22

I was fortunate enough to experience this exact kind of death march over a period of around 18 months. Unless you have the authority to guide the project back on track, there are only so many options available to you: 1: Document your concerns and any problems you've identified. Be objective wherever possible (i.e don't bitch about your co-workers even if the reason the project is failing is because they're fucking i…

make sure there is a paper trail Unless the situation results in criminal prosecution, when the time comes to use that paper trail nobody will care about it.

Possibly, but it depends on the project - the level of investment, and the structure of the company itself. If the project's failure is a threat to the company at large, then it's likely that an internal investigation will take place. The paper trail will help defend you.

Re: How should I behave as a developer in a project that's headed for failure?

#50

Honest, "be slightly evil" answer: say absolutely nothing. Just work. Get done what is asked of you. When you have free time (which you often will, due to the chaos as things start to shake) use it to build skills for your next gig. People will probably lose jobs. Sometimes that will happen based on seniority and sometimes it's just random. Sometimes, that will happens to the PITAs who spoke up and happened to be rig…

Right on. Working conscientiously when easy excuses for doing otherwise are in season is the essence of professionalism. Providing one's best given the circumstances is the core character trait. Deadlines move, budgets expand, requirements shift and staff move on (including managers). All are beyond the line worker's control. Sometimes, life includes a deathmarch. You still gotta' throw strikes when trailing by thirteen in the top of the sixth.
Post reply on HN