Slashdot Mirror


Dealing with Difficult Development?

jjwahl queries: "I've recently been handed a funded web development project, and in an industry where almost any paid work is good work this is a welcome opportunity. This database intensive site basically has the look and feel developed but none of the plumbing. I have been given the job to create the database and write the code to make the site work - all at a reasonably good rate and with a time and materials payment structure (i.e. this is not a fixed cost project). Sounds like good news, right? Not necessarily." The company wants the work done in a timeframe that prevents a well thought out design and pretty much eliminates a decent testing phase. How would you handle working on such a project?

"Why [is this not good news]?

The project timeline is insanely short given the complexity; there is nothing of substance developed yet - no schema, nothing; given the timeline, all schema development will have to be done on the fly - no time to sit down, take a holistic view of the project and develop the schema properly; and there is also no timeline for testing - other than the ad-hoc testing a developer does, there is no time for formal testing at all. All of this means that I'm basically going to develop this site on the fly which means that I'll eventually make mistakes, and won't have a proper testing cycle during which I could catch them -- the public will catch them, instead and complain.

I'm afraid that despite my heroic efforts to bring this site to fruition, this job will look sloppyand reflect badly on me. Have any of you been in a similar situation? How did you deal with it? Should I just turn the project down?"

13 of 61 comments (clear)

  1. Is this a trick question? by Neck_of_the_Woods · · Score: 5, Insightful


    Everyone has been in this position!

    What, never heard the saying:

    Good, cheap, Quick: Pick 2.

    State your concerns now. Clear the air and let them know your issues. Do this NOW!

    If your scared they will drop you, well that is something you need to think about. Not saying anything is going to make look sloppy or a dolt.

    So are you a dolt, or do you have the brass balls to let them know this is unrealistic. Either way make a choice and let them know. Let them make a decision or shut up and grab a paycheck with both hands.

    Good luck.

    --
    Neck_of_the_Woods
    #/usr/local/surf/glassy/overhead
  2. golden consulting rule: Learn when to "No Bid" by ubiquitin · · Score: 4, Informative

    Sounds like you need to take a look at the Golden Rules of Consulting. The relevant rules are: be the professional's professional, know when to "no bid" and know your customers. It sounds from the description that you need to provide some assistance with not only execution of the project, but give advice on what is a reasonable methodology and/or time frame for it. Advice to adjust goals is hard to give diplomatically, but often the most needed.

    --
    http://tinyurl.com/4ny52
  3. If you can't do it properly... by Anonymous Coward · · Score: 4, Insightful

    Don't do it at all!

    Having been in a similar situation recently, I would strongly suggest you turn the offer down. The risk of delivering a failed project, either over time, over budget or simply not working is far too great. Unless they plan to pay you an ungodly sum of money to offset the risk (the old risk/reward balance...), it is probably not worth the stress and frustration.

    During the project I had the misfortune to be involved in (after it went down the drain), the project manager had a very firm committment to the delivery time and essentially decided to forego testing altogether. The day the site went live, it took all of five minutes for the whole thing to crash horribly. When I was called in to clean up the mess, I discovered an enormous amount of sloppiness, security holes and "shortcuts" which made it almost impossible to fix. The developers who delivered this site were clever guys and had successfully implemented similar projects, but the time and budget constraints made it impossible for them to deliver decent work.

    From the question, I take it that your concerns are the same in this instance. The answer should be that if you don't think it can be done with a reasonable support framework of decent design and proper testing, it is not worth the exposure.

  4. Have you tried telling them this? by Klaruz · · Score: 4, Informative

    Make them understand the site needs to be designed, written, and tested. If you leave out the design and testing part it will suck. Lots of books written by people smarter than me will back this up. If they say they can bring in somebody else who can write the code right without a design/test phase, they're lying to them.

    Despite tough times, things still need to be grounded in reality. They need to get over it and do the right thing, or can the project. The customers aren't going to care about the site reflecting bad on YOU, it'll reflect bad on the COMPANY.

  5. The Contractor's Creed by Anonymous Coward · · Score: 3, Funny

    A wise contractor told me once:

    Ours is not to question why, ours is but to bill them high.

  6. Several options by rkwright · · Score: 5, Insightful

    1) Do you have any rapid development tools at your disposal? Depending on the technology involved, you could leverage certain tools like Visio or any of Rational Rose's products in order to quickly generate the database scripts and/or skeleton code; however, for this to actually be useful, you have to already be familiar with these tools in the first place (and thus not spend half your time looking for the right menu options or diagram shapes).

    2) Could you perhaps break up the functionality into phases? Sometimes the best way to do it is to give them some initial functionality sooner, then deliver the rest as a "phase 2". This will give you the chance to deliver a more solid "phase 1" that both you and the client will be satisfied with.

    3) If the client is not willing to work with you on the timeframe (or they are not willing to negociate a solution in the above idea), then definitely state to them that you cannot accept the project, and that furthermore you want to give them a little advice that whomever does accept the project will probably deliver a shoddy solution, given their rigid timeframe.

    I deal with this quite a lot at my company; however, I've found that our business people and our outside clients are actually rather receptive to a phased release schedule, especially if you can deliver their important features earlier and then leave the less important features to a "phase 2."

    1. Re:Several options by Twylite · · Score: 4, Informative

      This is the best comment I've seen so far. While turning down the customer, "making them understand" the need for design, or "pick to of the usual" are nice in theory, it comes down to earning an income, and sometimes you have to compromise.

      Having been in similar situations for various reasons, I can offer some pointers.

      • First, realise that design, even a little bit of it, improves your speed of delivery. If this is not the case, you're either a genius or don't have sufficient design skills. Design allows you to forge ahead with development without doing unnecessary work, or rework because of mistakes. It also allows you to reduce testing if you have to.
      • Gather some requirements. This may sound obvious, but it is often neglected when time is tight. You don't need a detailed requirements engineering process -- a page of important functions or descriptions of how the user should experience the software is enough.
      • Exercise the requirements a little: role-play through a simulated interaction with the user. Did you remember access control and error handling when the luser is being stupid?
      • Use CRC cards to design and plan your project simultaneously.
        Start by identifying the significant components in your system, and write each one on a card. In conjunction with exercising the requirements, flesh out each card with the component's responsibilities, the data is has, the data is needs, and make a note of which other components it interacts with.
        You now have a collection of components to be developed, along with a description of each one. If any components are particularly large/complex it is best to split them into logically cohesive sub-components if possible (for the purposes of planning, even if they will be implemented as one component).
        Work to a project plan by going over each card and estimating the amount of time it will take to develop the component.
      • Flesh out the design before implementation. No, really. Define the APIs to your components, and try your hardest to avoid changing them. If necessary add additional API methods, but try not to change the existing ones (this prevents rework). At worst, change the implementation of an existing method to call a new, improved method.
      • Now comes the trick of fitting the development into the timeframe. The first course of action is to go over the CRC cards again and cross out any non-essential functionality. Your priority is to delivery a functional system conforming to the minimum requirements.
        As suggested in the parent comment, try to break delivery into phases. Even if the customer does not agree to a phased delivery, plan for it anyway! If you're going to overrun your schedule, at least have something ready on time - it is a strong negotiating tool.
      • Don't underestimate the usefulness of hiring a few extra hands. If you're expecting trouble getting payment out of the customer for late delivery, and you really can't afford to drop the contract altogether, consider getting an extra developer to assist you. You could offer a salary, contract, or profit sharing, and if you've used the methods I outlined above the plan the project, its easy to farm out components to developers.
      • Reduce your testing burden by getting it right first time. I know this is not as easy as it sounds, especially with web development, but using techniques like Design By Contract (or at the very least asserts with documented parameter ranges) you can avoid a LOT of common programming errors.

      By doing a bit of design and planning, and being careful to use bug-avoidance techniques during implementation, you can significantly reduce your development lifecycle in order to meet a tight deadline.

      --
      i-name =twylite [http://public.xdi.org/=twylite], see idcommons.net
    2. Re:Several options by spongman · · Score: 3, Interesting
      Yeah, if you're not adverse to a Microsoft-based solution check out the Object-Role Modeling (ORM) support in Visio.NET. The general idea is that you specify the schema of your data using a format that is easily understandable by both you and your clients: english sentances, but at the same time that information can be used to create a database schema, tables, constraints, sample data and source code for operating on that data.

      But as the parent said it might take too long to familiarize youself with the tool for it to be effective.

  7. time? by AresTheImpaler · · Score: 5, Funny

    dude.. if you don't have time, the only advise I can give you, is to stay away from /.


    rigo

  8. Please don't work for free. by Inoshiro · · Score: 4, Insightful

    "and in an industry where almost any paid work is good work this is a welcome opportunity"

    If you work for free, or undervalue your work in a consulting situation, you are putting other people out of work. I don't mean writting GPL code. I mean that just because you are unemployed and collected on it, does not mean you should help people with problems without billing them. If you do work and are not paid for it, you are merely volunteering.

    --
    --
    Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
  9. If you do it, do it properly... by arb · · Score: 5, Informative

    ...or at the very least, know which are the right corners to cut. No matter how tight the deadline, you have to do some design work. Before you agree to take this job on, sit down with the client and explain to them the (very real) risks of not doing any design or testing. Make sure they are very clear on this. Then, if the client still insists on such a tight schedule, suggest a staged deployment.

    What functionality is absolutely vital to the project? What can be delayed until a second release? Do not accept the client's initial response that all the functionality is of equal importance. No matter what the project is, there is surely some features that can be delayed slightly. This will open up some breathing room in the schedule.

    Once again, make sure the client knows exactly how much of the project you will be delivering at each stage, and get them to sign a document outlining the deliverables for each stage. If you don't get the client to sign off, you could be screwed over down the track.

    If the client is still insistent on tight deadlines and minimal or no testing and you are crazy enough to take this on, make sure you get them to sign a document stating that the decision to do minimal testing is theirs and that they are aware of the massive risks they are taking. Do not start this type of project without making it perfectly clear that it could go to hell in a handbasket if the system is released to production without adequate testing.

    I was in the situation where we had to design, build and implement a system in a very short time frame. (Y2K project, started in Nov 1999!) The client was made aware of the risks, and my supervisor almost came to blows with him over the issue of testing. My supervisor was insisting on putting testing into the project plan. (Okay, his idea of testing was pretty scary - run the app and punch in some dummy data. No real methodology behind it, but at least it was something...) The client freaked when he saw that the project would take 3 months, thus pushing the release date to Feb 2000 - obviously no good. The client then made the decision to do no testing (apart from developer's bench testing) and he wrote a memo to that effect. as it turned out, there was one nasty bug that crept into the system, but the client was happy to wear the cost of fixing it and out butts were covered. He absolutely needed the app in place by midnight on Dec 31 1999, so he was willing to accept a potentially buggy product.

    Take the time to document the requirements. Take the time to design the system. If the client wants to accept the risks of reduced testing, fine, but make them sign something to that effect (and then do even more unit testing as you are coding than you normally would) to CYA.

    If in any doubt, don't take the job.

  10. People underestimate the need for leadership. by Futurepower(R) · · Score: 3, Insightful


    People vastly underestimate how much leadership is necessary to make something good happen. It regularly happens that customers do something self-destructive or ignorant. The main job of a consultant is not to write good code, it is to provide excellent guidance.

    A common answer to this observation is, "I'm a programmer. I just want to program. They should do the management." This makes sense, but doesn't seem to be the way the world works. The reality is that there is a severe shortage of management, especially technical management. You will be expected to provide some. It is like a party held during a famine; everyone is expected to bring food.

    Leaders are people who try to resolve conflict. It is the job of a consultant in the situation you mention to understand the customer, including the customer's psychology, and provide whatever is necessary to do a good job. If you know better than the people around you, you are the leader, even if you are not the acknowledged leader. If the customer is self-destructive, that means that you are the leader. Otherwise you are just accepting craziness and filling your life with it.

    Often an impossible deadline is just an expression of hidden fears that programmers cannot be trusted. Often an impossible deadline is a symptom of ignorance about how to manage a technical project. Sometimes people think that by encouraging other people to work 12 hours per day they will get more useful work for their money; that is not actually true because of mistakes and fatigue.

    Underestimating the need for leadership is a symptom of a larger misunderstanding about life. People regularly underestimate the minimum complexity of life. In actuality, people are usually doing crazy things; craziness is happening all around you. If you look closely, it is very likely you will see that the example you gave is just one of many crazy things happening at the company that is suggesting the impossible deadline.

  11. Cut the scope by lux55 · · Score: 3, Insightful

    When the deadline of a project is shortened, your human resources are capped, and you can't cut back on the quality (any further), there's nothing left but scope. Tell them to take their pick, or make recommendations. Tell them you'll have to push some of the functionality back into a "phase two".