Slashdot Mirror


How Can a Programmer Make Everyone Happy?

Nuttles1 asks: "Ever since I became a professional programmer, 4 years ago, I have struggled with giving my superiors everything they want. For instance, I have a programming supervisor that stresses correctness in programming first, amount of time needed second, features third, but I also have upper management stressing features and amount of time needed first and correctness of programming a distant second. The nature of my job requires pretty strict deadlines so time is not very variable. So, things get done in a way that fits the time allotted. The problem is that I don't make my direct supervisor happy because of the time constraint shortcuts in correctness must be made. The other problem is that, because I perform within the time constraints, they think that the time constraint can either stay relatively the same or that they can be squeezed a little more. Upper management also expects the advantages of having a strict programmatically correct program (code reuse, loose coupling, ease of maintenance) and are at loss when things are less then perfect after the initial release. It doesn't seem like a programmer can come out ahead. I have read many books but they usually have a utopian viewpoint or view time to develop as a variable. In real life, how do programmers handle this situation?"

14 of 174 comments (clear)

  1. Uh, welcome to the world of business? by WebHostingGuy · · Score: 4, Insightful

    This is not so much a programmer problem but just a business problem; also known as a people problem. Just substitute programming with any other job description and you have the problems everyone deals with on a daily basis. There is no right or wrong answer only the relationships you have to deal with.

    --
    Quality Hosting e3 Servers
  2. When you've made everyone happy... by billybob2001 · · Score: 3, Insightful

    ...use the ice-pick on a piece of hell for my drink.

    You can't make everyone happy, nor should you try.

    Delegate - upwards, sideways, anywhere - everything that is not your responsibility: business analysis, requirements definition, project planning, test planning, and steer clear of the politics.

    Insist on written documents, version controlled, reviewed and signed off, to show your supervisor what the constraints are.

    You have to deliver to the company's scheduling needs, and you need to keep the quality as high as possible.

    Anything you can add at the technical level is only a bonus, unless you can explain it (in tech terms) to the business as a benefit to them, and they understand, and care.

    Now, for the important question:

    How can you make YOURSELF happy?

    (otherwise, what are you doing it for? - and don't say paycheck, 'cos there's a balance and money ain't everything)

  3. The Three Programmer's Virtues by Linux_ho · · Score: 5, Insightful
    You don't need anything else. Pay special attention to the last virtue. It's middle-management's job to provide upper management with a realistic schedule that allows time for a quality implementation. If upper management questions you directly, tell them they can have any two of these options: (A) fast, (B) cheap, (C) good. Chances are, they will understand that a quality implementation takes more time. If they choose (A) and (B) anyway, start resume polishing, the company probably won't be around long anyway.
    "We will encourage you to develop the three great virtues of a programmer: Laziness, Impatience, and Hubris."

    LAZINESS: The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don't have to answer so many questions about it. Hence, the first great virtue of a programmer.

    IMPATIENCE: The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least that pretend to. Hence, the second great virtue of a programmer.

    HUBRIS: Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won't want to say bad things about. Hence, the third great virtue of a programmer.

    - _Programming Perl_, p. xiv, by Randall Scwartz & Larry Wall
    --
    include $sig;
    1;
  4. Re:hmmm, is there a missing party here? by DrSkwid · · Score: 4, Insightful

    Your manager was right on both counts.

    1) Although you know how long it will take you, you do not know how many other projects will be multiplexed into your time. It is your manager's job to decide how long it will take you to complete a task for a client, regardless of how long it will take you.

    2) You gave away your time for free, you released code without authorisation which is added risk to your employer.

    --
    There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
  5. Wrong Question Your purpose is to make you happy by Crashmarik · · Score: 5, Insightful

    Lets get real here. The stiuation is bad, your'e not in a position to change it. Ask yourself who writes your performance reviews. Talk to them. Find out what they want from you. Give it to them. Wait for your review and then either move up or be prepared to move away.

    Sometimes you just have to be your own best friend.

  6. Re:hmmm, is there a missing party here? by chris_mahan · · Score: 5, Insightful

    Well, really the manager made the mistake of taking the engineer in there in the first place. The second mistake from the manager is not taking him in "the room" and laying out a plan of action.

    Ultimately, it's ALWAYS management's fault.

    Yes, Always. Always, always, always. Remember: It's always management's fault.

    Did the programmer slack and not deliver the program on time/at all? Management should have motived him or replaced him. It's always management's fault.

    Therefore: It's not the engineer's fault, ever.

    --

    "Piter, too, is dead."

  7. Re:hmmm, is there a missing party here? by Cmdr-Absurd · · Score: 3, Insightful
    Hate to say it, but in both cases here, he was absolutely right.

    Well yes. But a manager should have made expectations clear before bringing a subordinate into the room. If THAT didn't happen, then the manager is at fault.

    Those that suggest software (or any other product) should do EXACLTY what is contracted and NOT ONE SINGLE THING MORE are being, I think a little short-sighted. Yes there are IP issues, but those can be addressed with a bit fo boiler-plate legaleze -- this feature is provided as is -- no warrany whatsoever -- it is not supported, yada yada.

    But if I am the customer, and a I get a bit more than I expect, I'm a VERY happy customer and not only do I put this company at the top of my list of preferred vendors, but I'll spread the word to others. The company that goes the extra mile will get more business in the end.

  8. Honesty and Forthrightness. by mosel-saar-ruwer · · Score: 3, Insightful

    Nuttles1: ...I have a programming supervisor that stresses correctness in programming first, amount of time needed second, features third, but I also have upper management stressing features and amount of time needed first and correctness of programming a distant second...

    p2sam: You should report to one mananger, and one manager alone... Well, in a perfect world, that's how it should work. :)

    Just be completely honest and forthright in all your communications.

    Suppose you have

    Dick Weed
    dickw@uppermanagement.acme.com

    Brown Knows
    brownk@middlemanagement.acme.com

    Then your emails would read like:
    TO: dickw@uppermanagement.acme.com;brownk@middlemanage ment.acme.com

    SUBJECT: Conflicting priorities

    BODY: In re: the new feature set that was promised to the client - I can probably "make" the deadline of Friday the 13th, but I'm gonna hafta break a lotta rules, and write some pretty darned ugly spaghetti code, and I would definitely be cheating on those ISO 9000 standards that we were trying so hard to adhere to.

    It's your call.



  9. A Kent Beck quote by Beek · · Score: 3, Insightful
    From Extreme Programming Explained:
    If you have six weeks to get a project done, the only thing you control is your own behavior. Will you get six weeks' worth of work done or less? You can't control others' expectations. You can tell them what you know about the project so their expectations have a chance of matching reality. My terror of deadlines vanished when I learned this lesson. It's not my job to manage someone else's expectations. It's their job to manage their own expectations. It's my job to do my best and to communicate clearly.
  10. Where's the product manager? by skybrian · · Score: 3, Insightful

    Slashdot is really the wrong place for this sort of discussion, but here goes: It sounds like you're working on a product that doesn't have a product manager. The way it's supposed to work is that the product manager decides what goes into the product and coordinates with the developers to come up with a realistic schedule. Anyone who has a request should be talking to the product manager to get it into the schedule.

  11. Re:hmmm, is there a missing party here? by geohump · · Score: 3, Insightful

    Clearly you knew what you were doing... this time.

    IFF you can do this 95% of the time then obviously the smart thing to do is find yourself a salesperson and go into the consulting business doing this type of work.

    As soon as you have to start paying the salary for the salesperson, the overhead of running your business and doing the tapdance of handling more than one client at a time while simultaneously trying to land more work for the near future you will probably understand exactly where your boss was coming from.

    ( tap tap tap...shufflin' off to Buffalo...tap tap )

  12. Re:Several things to consider by Osty · · Score: 4, Insightful

    * "Dead lines" are never really dead lines. They are just guidelines to when you should reach something that works (not works well). The management (or a good management) always takes into account you probably won't make it in time anyway.

    That's not necessarily true. At least, not the way you explain it. Deadlines can be real "dead lines", in that if you miss the deadline you're dead (or your project, anyway). However, don't forget that time (deadlines) is just one part of a triumvirate of quality, time, and features. If time is fixed (you're on a contract with a specific end date, you've publicly promised to ship on a certain date, a different team has publicly promised to ship on a certain date and your project is a requirement for their shippnig, etc), then something else has to give. Enlightened managers will cut features in favor of quality. Unenlightened managers will cut quality in favor of features. The only way to deal with this as a front-line developer is to make sure you're getting pressure from only one place -- your direct manager. If your manager's manager is dictating something else, you have the right to tell him or her to go through your own manager (in a diplomatic sort of way, unless you like being on the shitlist). Of course, you can go the other way, too. If your manager is setting unrealistic goals, or is damaging the project (focusing on features instead of quality), you can and should go to their manager and discuss the problem. Either way, you can't perform two contradictory actions at the same time, so you need to speak up.

    * Good design and code re-use are there to save time, not to waste it. Take the time doing things right, and it will save you time in the long run.

    You must not work in the commercial world. Looming deadlines and a list of promised features often means you have to sacrifice some quality. Usually you'll do so with the intention of cleaning it up in V.Next, but the vicious cycle of less time and more features conspires against you. The best you can do is argue in favor of doing things right, or at least taking some time to do a postmortem to evaluate why quality had to be cut and try to get time to clean things up. That's a problem with shrink-wrapped software, though, because nobody's going to buy a new version just because you cleaned up the architecture (assuming the previous version works well enough already). So you're back into doing features rather than fixing brokenness. While it sucks, you can at least take some solace in knowing that you wanted to do the right thing but couldn't because of someone higher up the chain.

    * You should always please whoever controls your future (but first, yourself).

    In the broadest sense, you control your future. But more pragmatically, it's really difficult serving two masters. You'll be happier and better serve your career growth by using the chain of command to work for you. Make sure you're only taking tasks from your direct manager, and don't accept any tasks that didn't come down that chain. There are times when you can and even should take tasks from people other than your manager, but when crunch time is on and it's a Do or Die situation, funnel those requests.

    Finally, evaluate why there's no time to do things right. Are you giving bad estimates? Are your estimates being changed by others besides you (people who aren't going to do the work)? Are your estimates assuming a perfect working environment? (if so, adjust your estimate to include context switching time to deal with interruptions, or lobby for "dark days" where you can turn off email, shut your door, and stop any interruptions so you can get a full day's work done.) Maybe you can change some things. Maybe you need to change your own view. Maybe you need to change jobs.

  13. My wife saw it instantly by ancientt · · Score: 5, Insightful

    I explained the problems you're facing to my wife.

    She said "How long has he worked for Microsoft?"

    After giving it some thought, she suggests "get some balls and ask your boss exactly 'what do you want?' so that you can cover your ass, preferably by email and when the higher smucks express displeasure, hit the print button."

    She goes so far to say you should include the higher smucks in that discussion of how it should be done. Carbon copy them in the email if you're emailing.

    Disclaimer: I am posting her suggestion because she has been in this type of situation and came out well. Personally, I see a danger of tanking evaluations and having to keep an eye out for the next job.

    --
    B) Eliminate all the stupid users. This is frowned upon by society.
  14. Educate your manager... by JazzManDRP · · Score: 5, Insightful

    Talk to your line manager. In a private meeting, explain the compromises you're having to make in your work. Explain that the code you're being forced to release is unmaintainable, is prone to be bugged or poorly-structured because of the time constraints being forced.

    Explain a compromise where you get some of the time you want in return for some of the code quality you want. You'll never get all the time you want but, if you can convince your boss that it's going to be of overall benefit, you might get enough.

    Most importantly, if the shit hits the fan and your product comes back to you, make sure you're absolutely realistic with management about why this has happened. Yes, the code was sub-quality. Yes, the design was insufficient. Yes, it's management's fault on both counts for not allowing enough time for the proper running of the project.

    One of the main problems is that a typical lifecycle (specification, design, implementation, testing) makes no sense to management. Even a technical manager will try to rush the specification and design so they can have demonstrable progress - something to show the client, even if it's not been thought through. And, as soon as the product looks complete, they'll want to get it out where it makes money, regardless of how thoroughly it's been tested.

    Educating your superiors about the reality of these things is hard work. You might have managers that will - slowly - learn, in which case you may make some progress. Alternatively, look elsewhere: it's one of the most subtly self-destructive things, to be stuck in a job without being given the opportunity to do it well. Find somewhere that gives you that freedom.