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?"

8 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. 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;
  3. 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
  4. 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.

  5. 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."

  6. 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.

  7. 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.
  8. 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.