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

16 of 174 comments (clear)

  1. hmmm, is there a missing party here? by yagu · · Score: 5, Interesting

    Well, from your narrative I see you've landed the ultimate professional progammer position: one where management doesn't listen, tries to squeeze deadlines, and thinks code more than anything else has to be correct (the unfortunate thing about that being your management, the least qualified to say, probably defines correct.)

    And, forgive me, I can't help but notice but the word client or customer is not mentioned even once in the narrative which indicates an upside down world for delivering applications (not all that unusual, but still upside down).

    Also, you mention superiors, try to be a little less humble, they're likely not. And, you talk about "upper management". When upper management has their uncalloused little fingers all the way down to your level in determining quality, ....

    Ultimately, unless you have some strong ties, or visions of fast advancement you'd be no worse off if you looked around a little to see if there is someplace that seems a little more attuned to the real world and a little less pedantic about "coding".

    aside: (but related) I first encountered how crazy a world it could be with my first big assignment. I had to sit down with my manager, and our client. The client described what they wanted, and I gave a thumbnail estimate, apparently to the surprise of my manager. Surprise number 1: my manager took me into "the room" and told me never to give an estimate to the client without his approval. (I might agree with certain aspects of this, but I was confident of my estimate and had sort of figured it was part of my responsibility.) He wanted me to double my estimate, and that was what we would base our charge to the client on.

    I finished the project ahead of my original estimate -- adding enhancements and extensions to some software we'd purchased from a sister telcom. When I delivered it to the clients, ahead of schedule, I pointed out that part of the original output of the original program was just garbage, i.e., there was no code written around that output, and it had no correlation to the rest of the report. The client knew already and told me they always just ignored that part of the report. I asked if they needed or wanted that part of the report, and their eyes just lit up. So I offered to deliver yet a different version of my code which included a fix for the broken part of the old application. The client was ecstatic, a glowing letter ensued.

    My manager took me to "the room" again. I tried to remain calm, waiting for the accolades, perhaps even a bonus? But, he pointed his finger in my face and said, "Don't you ever deliver more to the client than you say you will!". Stunned silence.

  2. Your organization is fscked. by p2sam · · Score: 2, Interesting

    You should report to one mananger, and one manager alone. That will also be the person to assign you work, and give you priorities. That will also be the person who gives you performance reviews. So you better do what that person says. You have no business following low level directions like "what programming methodology to employ" from upper management. And upper management definitly has no business telling you how to do your job.

    Well, in a perfect world, that's how it should work. :)

    1. Re:Your organization is fscked. by NemoX · · Score: 2, Interesting

      I agree. If your direct manager was doing his job properly, you should never have to talk to upper management. Then that solves the problem. Why are you stressing because someone else isn't doing what they are supposed to do? Explain to your manager that his job is to buffer all the political BS, so that you can do your job. Do what he tells you to do, and if upper management ever questions you, you tell them "I was doing what I was told, if you have a problem with it, talk to my programming manager."

  3. Use hierarchy to your advantage by Mark+of+THE+CITY · · Score: 5, Interesting

    Insist the "higher-ups" go through your direct boss. Not every boss will protect you this way, but unless it's a really small startup, they should, IMO.

    --
    The clearance system sounds logical. It is not. It is completely arbitrary. -- John Bolton
  4. Several things to consider by Geshem · · Score: 3, Interesting

    There are several things you should consider:

    * "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.
    * 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 should always please whoever controls your future (but first, yourself).

    --
    || Geshem ||
  5. Bill Cosby said it best by Pyromage · · Score: 4, Interesting

    "I don't know the key to success, but the key to failure is trying to please everybody."

    Please the boss that can give you the raise and fire you.

  6. Honest self assessment time by heinousjay · · Score: 3, Interesting

    You need to be honest with yourself and determine how good you are, then move on. It's not worth trying to fight a system like you describe, and if you are in the top half of the talent in the industry, there's a job out there for you that's more interesting, pays better, and isn't half as painful.

    If you're in the bottom half, I guess get used to it and be happy you're employed.

    --
    Slashdot - where whining about luck is the new way to make the world you want.
  7. The project can always afford to slip a little bit by cgenman · · Score: 3, Interesting

    Not to be too pessimistic, but no matter how large the project is, no matter how important it is to everyone involved, it will be faster to slip it now and get it done right than to fsck it up and need to do it over.

    Projects slip all of the time. Someone is setting up how much time you have. Time is always variable, and is negotiated with outside entities. Your boss's boss, the loonies in marketing... someone is setting the schedule. Schedules are always optimistic. The bigger and more important the project, the more likely it is to slip.

    The key is not to do what people want, but what will make them happy. Your immediate boss probably wants Stanford dissertation level code, but would be happy with good documentation and re-usable classes. Your higher-ups may want it done fully featured last week, but would be happy if you explained that the extra time you spent now can save a week off of all of your other projects. And if you can only make one person happy, tell everyone else to go to that one person. It takes guts to tell a high-level executive to talk to your manager, but that's what it takes. And sometimes you have to tell your manager to talk to the high-level executives. But if you can't make lots of people happy, make one person happy, and tell everyone else to stuff it on their authority.

    Most importantly, the code you make should make you happy. If it doesn't, it isn't going to please anyone else. More importantly, though, you're selling your company your time and experience, not your soul. If your experience (however young) says to do something differently, that's what they're paying you to know. And if it's your soul they want... just recognize that a wall-street banker can make upwards of 200,000 dollars their first year. Souls go for a lot more money than you probably make.

    Either way, you're getting laid off in 5 years. Good luck!

  8. atrocious management by mosel-saar-ruwer · · Score: 4, Interesting

    Surprise number 1: my manager took me into "the room" and told me never to give an estimate to the client without his approval.

    My manager took me to "the room" again. I tried to remain calm, waiting for the accolades, perhaps even a bonus? But, he pointed his finger in my face and said, "Don't you ever deliver more to the client than you say you will!". Stunned silence.

    This is just atrocious management.

    A good manager would have practiced [over and over again] the interaction before he ever let you meet the client face to face.

    For example, he would have stressed things like

    RULE #1: We never promise a deadline to a client unless we first clear it with accounting.
    REASON FOR RULE #1: Time is money, and if we haven't generated enough billable hours this month, then we're gonna need to generate more [not fewer] billable hours. Welcome to the real world, kiddo.

    RULE #2: We never give away free code unless we first clear it with accounting.
    REASON FOR RULE #2: Code is money, and if we haven't sold enough code this month, then we're gonna hafta sell more [not less] code. Welcome to the real world, kiddo.

    And then he would have gone through practice conversations in which he pretended to be the client, and he coached you as to what to say and what not to say, and how to hem and haw your way out of making any firm commitment [until the "correct" answer could be cleared by accounting].

    Your manager not practicing a client site visit like that with you beforehand, and then admonishing you afterwords, would be like a football coach not teaching his playbook to his players during practice [or never even showing them the playbook in the first place], and then yelling at them after the game because they were clueless on the field.

  9. Perfect interview question by kbielefe · · Score: 3, Interesting
    It can't really help you now, but this is the perfect question to ask the next time you are changing jobs. You know the part where they ask, "Do you have any questions?" They actually mean it.

    Seriously, I am a lowly technical lead of a team that usually consists of just me but grows to 3 or 4 people for a few months during "crunch" times. My management is required by our documented process to ask me how much effort something will take before it is approved. If the deadline cannot be met, they add staff well in advance or slip the change to a later build.

    --
    This space intentionally left blank.
  10. Exactly by JavaRob · · Score: 2, Interesting

    A good way to deal with conflicting bosses is to make them agree.

    There's a very important point in here. Your bosses are not constants, they're variables (well, that's one way to put it). If they're fighting each other through you, you need to get out of the friggin' way, or end up as collateral damage.

    If your direct boss tells you to do X, and his boss tells you to do Y, right away you should point him to your direct boss. "I'll let you two sort this out and get back to me." Neither one is necessarily "right" or "wrong", in that different customers expect different things and will react differently to on-time crappy software vs. late excellent software... and there's sometimes a trade-off in writing lovely reusable code that's good in the long-term vs. hasty NON-reuseable code that gets the project out the door and money in the bank short-term.

    There's also the trouble that some programmers who are told to "design for re-use" will bog the project down into eternity with bloated "handle-every-possible-case" code, while others will simply spend a little more time thinking and come up with an elegant solution that's *smaller* than the one-time-only hack job, and reap the benefits in the very next project. And alas, the average programmer without strict oversight falls mostly into the former camp. So it's no simple answer.

    But these are business decisions that your boss and his boss need to sort out. You should just indicate that you understand that these issues exist, and suggest (in a friendly way) that they do their jobs.

  11. Another blurb from another pro business app dev by RingDev · · Score: 2, Interesting

    Number one montra in business application development. "I'm doing this for the user"

    Remember that. The user (customer/client/employee) defines the features they need. These features form the basics of the requirements document.

    Your tech lead/analysist/coordinator is going to ask you for time estimates. Business sciences says the way to find this number is to find the Optimal time(a), the most likely time(b), and the worst case time(c) and apply the following formula:

    Expected time = (a + 4b + c)/6

    If I think I could get a roughed out edition together in 8 hours, I would use a=8, b=16, c=58 for an expected time of 22 hours. You to can sit through hours of business science and learn this too, or just use the old addage of "triple it!" and quote 24 hours ;)

    So, you kick that number back to the coordinator. The coordinator looks at other projects on your plate and priorities and sends a time estimate back to the manager.

    That should take care of the deadlines and feature set. You have a rec document, and a schedule. Next up was code style. Most current business office application development is going to be in a RAD environment. VB and .Net are likely the most widely used and have a collection of the greatest tools (sorry Java guys, eclipse just doesn't hold a candle to Visual Studio). One of the greatest things about developing in .Net is that we (finally!) get true object inheritance. And while people smile and nod and say isn't it great with out knowing why, I can tell you, I can't imagine coding with out it. One of the few things I really agree with Joel Spolanski [sp?] about is code up front. It takes longer to build a completely abstract data layer and impliment a standardized data object (using inheritance and abstract factory classes), but the advantage of having a DLL that can be inserted into any project and give you immediate dev time access to database metadata is immense. Having a series of base classes to handle the user interface, threading, data access, business logic, etc will save significant time in the long run.

    Our apps now our no longer even apps. We run a portal like interface, and when we receive new user requests they get developed as modules that are simply plugged into the existing system. Here are some out dated, but still handy looks at the type of design we use.

    http://ringdev.com/code/GFCTeirDesign.gif
    http://ringdev.com/code/GFCNamespace.gif

    Once you have a code base. Developing new apps is significantly easier, faster, and the code you produce is more stable. So your tech lead is right, code correctness is very important.

    And finally, don't be afraid to say no. I have 3 tiers of projects. Immediate, Down the road, and Ignore. If my coordinater drops something on my desk with a very low priority and a very large work load, I usually tell him I'll take care of it right after I clean my desk. Which usually implies that anything on my desk gets round filed. It is your manager and coordinater's job to take care of scheduling. If they are putting to much on your plate, sit them down, prioritize, and give back.

    -Rick

    --
    "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
  12. Re: Going the extra mile by some+guy+I+know · · Score: 3, Interesting

    After reading all of the sibling posts stating that you shouldn't have done anything extra, and that your manager was right to criticize you for making its customer happy, all that I can say is that if that type of thing is a preferred standard American business practice, then it's no wonder that our country is going down the toilet.

    --
    Those who sacrifice security to condemn liberty deserve to repeat history or something. - Benjamin Santayana
  13. Re: Going the extra mile by yagu · · Score: 3, Interesting

    For the record (and I haven't responded to the others, but finally, I need to respond to at least one)...:

    Ahem, for the record, at the session with the client my manager turned to me and asked me how long I thought it would take. That was when I gave my "estimate". When he chastised me later it was for offering such a short estimate, way too short in his opinion. (I know I didn't make that clear in my original post.) We discussed it, always in a civil manner, I stood by my opinion I could deliver in my estimated time frame but relented to his insistance I double the estimate for an official estimate for our client. I STILL finished in less time than my original estimate (including the fix of the other part of the code).

    As for that "other" fix... it wasn't something they had to test -- it was functionality they had long since abandoned as being something useful. It was a "dead zone" (3 lines per item) on the report they had learned to ignore because the data in that zone was incorrect and useless. The fix I applied took little time, and little effort, and did not put at risk the estimated delivery date (the DOUBLED estimate).

    We had an ongoing relationship with this client, essentially a locked in deal (their organization was part of the same umbrella corporation). Their list of needs and projects was virtually endless so it wasn't as if finishing this in half the time cut into our revenue stream.

    And the good will from this extra effort was returned in full. Our relationship with the client went from adversarial to collaborative. They LOVED the results they were seeing, and changed their attitude and demeanor with us. (They literally used to sit in meetings with scowls and arms crossed, distrusting every suggestion, estimate, etc. we proposed.)

    All in all, I was quite surprised at the beating I got for my post. Not so much that I got beat up, but that these attitudes are so pervasive. Maybe I didn't elaborate enough to give enough insight to my environment. But, I believed then, and I believe now the sum total of how we all do is a result of how hard we try to do good things, not how hard we try to maximize "controls".

    (example: a while back I drove to a tire service store well known for its service -- I'd never been there before. I had a low-speed wobbly steering wheel problem. I pulled into the lot, and they literally ran out to my car (an advertised "service philosophy" of theirs, but a surprise to see it as real) and asked me what they could do for me. I described my problem, they took my key and immediately put my car on a lift and did some quick diagnostics. After some tweaks and adjustments they returned my car and told me it should be better... and if there were any problems, to bring it back. No Charge! And, the steering wobble was gone!

    Less than a year later I needed new tires -- guess where I bought my new tires? The good will they brought more than offset the $50 I could've save at Costco... I'm a loyal customer.

  14. Re:Uh, welcome to the world of business? by dubl-u · · Score: 2, Interesting
    This is not so much a programmer problem but just a business problem; also known as a people problem. [...] There is no right or wrong answer only the relationships you have to deal with.

    I agree that this is a people problem, but I think there are specific solutions that work well in programming environments. Personally, I'm pretty happy with the planning approaches I've stolen from Scrum and Extreme Programming:
    • Get everybody who wants work out of you together for a meeting
    • Break the work down into independent chunks no more than a few days in length
    • Make the suits order them by priority
    • Every week, take a week's worth off the stack and do them, keeping track of how much you get done
    • As often as necessary, have another planning meeting where the suits reorder the cards based on how long your measurements indicate things will take

    By agreeing to do whatever they want in whatever order they desire, you appear flexible and willing. But this is also a sneaky way to get them to reconcile the fact that they want more than can be reasonably gotten done. Personally I like doing this with one index card for each chunk of work and an estimate in days on each card. That way you can just hand them the stack of cards and say, "Ok! Put these in order of importance and I'll get to work on the top ones right away."

    This has worked for me pretty much every time I've tried it. My life is much less stressful now.
  15. Re: Going the extra mile by yagu · · Score: 2, Interesting

    Hello mooingyak

    First, I need to (and wish I could somehow propogate this better) for the record emphasize and clarify my excellent relationship with my manager. We both gave as good as we got from each other and respected each other. He gladly and without prompting rewarded me for good work done well many times. But this was a case, as you pointed out, where his job was to make sure corporate procedure and policy prevailed. I still think he was harsh, and maybe even a little wrong on this one, but he was (and to this day is) a good guy and did try to do the right thing.

    To your other point, I agree, excellent point that it has got to drive a manager crazy when an employee sets off on his own, doing "extra" work. In this situation, (and I was considered a manager, technically, and expected to show appropriate behavior) the extra work needed to correct the "other" problem was less work and time than it would have taken to go through any process.... unilateral on my part, but NONE of my tasks or responsibilities were compromised... AND (I think I mentioned this in one of my posts) I ensured my deliverable was the deliverable they expected with the option of considering the other fix (which is why I forked the code... to allow for either choice, with no contamination to the original work).

    The final result was a much better relationship with the clients.

    Ultimately, your points are correct and well made. My disappointment was what at the time felt like excessive pedantry and strict policy adherence.

    Best Regards... yagu