Slashdot Mirror


Smart Software Development on Impossible Schedules

Andrew Stellman writes "Jennifer Greene and I have an article in the new issue of Dr. Dobb's Journal called "Quick-Kill Project Management: How to do smart software development even when facing impossible schedules." We got a lot of great feedback from our last article on open source development, but there were a bunch of people who wanted to know whether it was really feasible to do planning and reviews on a tight schedule. That's a fair question, and this article is meant to be an answer to it. We pulled out bare-bones project management practices that will help you protect your project from the most common and serious problems, and gave instructions and advice for implementing them that should work in a real-life, high-pressure programming situation."

225 comments

  1. Tried and true by Anonymous Coward · · Score: 4, Insightful

    Just make your developers pick up the slack by working lots of overtime.

    1. Re:Tried and true by Anonymous Coward · · Score: 1

      +1 Funny? More like +5 insightful. In 99% of the cases, this is what happens.

      How many programmers out there are paid salary vs how many are hourly? Why would management do anything else but overwork their programmers? Late project? Free labor? woohoo!

    2. Re:Tried and true by plague3106 · · Score: 1

      This is rather unfortunate too.

      Personally I think that only people in management positions should be elligable for salary pay; everyone else should be hourly.

    3. Re:Tried and true by Lonewolf666 · · Score: 5, Interesting

      Only that it does not really work. Overworked programmers are tired programmers who make more mistakes. Long ago, research has shown that the best productivity is reached with a 40 hour week.

      For details, see http://www.igda.org/articles/erobinson_crunch.php

      --
      C - the footgun of programming languages
    4. Re:Tried and true by Aceticon · · Score: 3, Insightful

      Just make your developers pick up the slack by working lots of overtime.


      A couple of points:
      - If you don't have a clear vision of what the software is suposed to do and how to get there, having people work 10h/week or 80h/week produces exactly the same result - you get nowhere - either the project is late and gets canned or what you deliver is not accepted because it doesn't match the expectations of the customer.
      - Long hours => tired developers => a lot more bugs => much more time is needed to implement the same features => long hours. Unless long hours are restricted to a couple of days, the end result is a vicious circle where removing the extra bugs introduced by tired designers/developers ends up consuming more time than whatever extra time you got from those extra work work hours.

      Making people work extra hours gives the appearence of getting more work done while reducing the actually amount of work that does get done. This is one of those management techniques that sites high up in the list of "Things that managers that have no sense of strategy do", right above measuring productivity by "lines of code written" instead of by "requirements features implemented".
    5. Re:Tried and true by Anonymous Coward · · Score: 0

      So it results in a buggy products. Never stopped anyone from shipping buggy (software) products.

    6. Re:Tried and true by lmh2671772 · · Score: 1
      Just make your developers pick up the slack by working lots of overtime.

      The only thing about having developers working overtime is that it is a measurable metric (however false) of effort. Nothing else is measurable (unless you do something smart like regroup and try to deliver something realistic, which doesn't fly). And if your developers are working massive overtime, then except for putting cots in the cubes, you've essentially proven you're "doing your best".

      Go figure.

    7. Re:Tried and true by Anonymous Coward · · Score: 0

      This is why none of the college kids want to be software developers anymore.

      They know that they will end up working overtime for someone less intelligent than themeselves.

      Well there goes one more good job to outsourcing.

    8. Re:Tried and true by achacha · · Score: 1

      Far too many eople feel they can manage developers, they are wrong and unmotivated or bitter developers produce subpar code and take much longer only doing what is required. Developers should not be managed, instead they should be lead. Leadership skills are far more important, one needs to realize that most developers are far smarter than their managers and unless they like their managers they will not be as productive.

      You can teach a mildly retarded person to move MS Project bars around so they align nicel, would anyone want them to manage thei career?

  2. Techniques don't make up for a bad schedule! by gasmonso · · Score: 4, Insightful

    In the real world, no amount of tips and tricks is going to make up for a bad schedule. We end up doing code reviews while are software is in verification and validation. Is that smart? No. But when you need to get features done, that takes priority. As for documentation, that always falls to the wayside as well. The truth of the matter is this. The only way to make schedule is to totally inflate your time estimates on the project. We developed a rule of taking the engineers estimates and double them. Of course we're still running a little late ;)

    http://religiousfreaks.com/
    1. Re:Techniques don't make up for a bad schedule! by AuMatar · · Score: 4, Insightful

      I don't disagree that tricks won't help you. I do disagree that getting features done should take priority. If you don't take the time to do things right, it will bite you in the end, either in debugging or maintenance, and likely take longer than doing it right in the first place.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    2. Re:Techniques don't make up for a bad schedule! by UpsideUp · · Score: 3, Interesting

      We would take the estimates, double them and add 30%, that is how I bid out all work. Now... The challenge is when you, the lead developer do not control you schedule and you are having meetings twice daily to discuss the progress. In that situation, well, it doesn't matter what the WBS says, or whether or not there is a code review, it matters that the features get done. Granted that is the anomolay for me, when it does happen, the goal is to get done and get out as quickly as I can.

      Is that the norm or the anomolay for others.

    3. Re:Techniques don't make up for a bad schedule! by Morris+Schneiderman · · Score: 4, Interesting
      We developed a rule of taking the engineers estimates and double them. Of course we're still running a little late ;)

      Of course you're running late.

      Let me guess - you're a young pup. It's always been the same, since the dawn of history. Every generation laments that succceeding generation has to make the same mistakes, and learn the same lessons, over and over again.

      IBM solved this estimation problem back when dinosaurs roamed the earth, virtually all computers were made by IBM, and they came with a "free" (as in beer) systems engineer.

      IBM's solution was that every level of management that had to review an engieer's estimate would triple the estimate of the person who reported to (almost invariably) him. So, if the estimate required two levels of managerial approval, the quote to the client was 9 times what the engineers figured it should be. If three levels of approval were needed, the official estimate was 27 times what the engineers came up with. Now you know how IBM was able to afford that "free" systems engineer with every computer.

      Actually, there are ways to drasticly increase the likelihood of success on "mission impossible" projects. I successfully led an EDI implementation project where there was no spec, no data, no customer, no access to the computers, the programming had to be done in an obscure language, and there was an arbitrarily set deadline of three weeks. Sometimes you take on such projects because you want to stretch yourself. But that's a story for another day.

    4. Re:Techniques don't make up for a bad schedule! by Baddas · · Score: 3, Insightful

      The problem, in general, is that often the need for an application is immediate, while maintenance is a later problem.

      In otherwords, the future value of 'doing it right' is lower than the immediate value of 'damn the torpedoes' and getting it done. (unfortunately)

    5. Re:Techniques don't make up for a bad schedule! by fbjon · · Score: 3, Funny
      the anomolay
      Something like blind sex, I presume?

      ( -> anomaly)

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    6. Re:Techniques don't make up for a bad schedule! by Lumpy · · Score: 2, Informative

      We end up doing code reviews while are software is in verification and validation

      wow you do code reviews? My last employer dropped those over 3 years ago to "speed up the process"

      --
      Do not look at laser with remaining good eye.
    7. Re:Techniques don't make up for a bad schedule! by gutnor · · Score: 3, Insightful

      Unfortunatly developers knows that very well. But features takes priority because they are the only reason why you get some budget to develop.

      Some companies works with a sick "problem bringer"/"problem solver" mantra. Removing feature to allow you developping beter code invariably put you in the "problem bringer" section and that is bad.
      On the other hand, putting all the features = "(management) problem solver".
      When the application crashes in production and the situation looks very bad for the manager, if you come with any way of cleaning the mess you are again a "problem solver".

      Every time you remove a feature or refactor the code preventively, from a management perspective you move 1 step in the dark side of the force, so you must handle that with political gloves, not common sense ( i.e. use fear factor, find tactical advantage for your manager not to include a feature, sneak "cleaning" code into features your manager think are worth extra-time to be able to cut budget later on a refactoring, ...)

    8. Re:Techniques don't make up for a bad schedule! by MickDownUnder · · Score: 5, Insightful

      "...take the time to do things right...."

      It's this notion that not going off and making a total ass over end cock up of a project, and "taking the time to do things right" that is really the problem with allot of developers, and managers attitude to software development.

      The quickest way to get a project done is to do it right ONCE! Not five times badly. At developer meetings I've often heard managers or developers call UML and other methodologies a waste of time or unnecessary, it always flabbergasts me to hear such ignorance.

      I've been in a situation where an (un)manager told me "We don't have the time to do document and do things the right way", my response was "No, we don't have the time not to do things the right way". We only had 6-8 months to get a large project out, with four programmers, a business analyst and two DBA's. I was told I wasn't to spend time in UML and documentation land, and you know what, I ignored him and spent 3-5 days creating high level class diagrams and interaction diagrams, the core of which lasted us through the entire project.

      Any project that you forecast is going to take longer than 3 man weeks ie 120 hours needs some sort of design in place to ensure that the major architectural constructs are already decided before coding takes place.

      The key to employing methodologies in projects successfully is unfortunately experience. It takes experience to use methodologies successfully, it takes experience to create good designs for applications and to judge when a design has become mature enough to allow development to commence without the risk of major refactoring later on in the project.

      It does in fact take time to acquire this experience (years in fact), but it does not take time to employ this experience once it has been acquired. If you feel like your project needs some sort of methodologies in place, but "you don't have the time", the answer is simple, it's not that you don't have the time, you don't have the right personnel. It's true if you have no one with the experience of delivering the architecture required in a professional and timely manner then taking on methodologies new to everyone on the team is going to take time and lots of it. A good manager however will make sure that the project is correctly resourced.

    9. Re:Techniques don't make up for a bad schedule! by zedeler · · Score: 1
      In the real world, no amount of tips and tricks is going to make up for a bad schedule. We end up doing code reviews while are software is in verification and validation. Is that smart? No.

      I agree that many "clever techniques" are just syntactic sugar on top of the language of developing. The results seem to remain the same with small variations. But what I have noticed is that developers (of all shapes and sizes) tend to believe that their job is best done behind the computer. And yes - this is where they have most skill, but it often means that people fail to leave their comfort zones and attack problems using completely different tools, when they ought to do so.

      At a small project I managed, I insisted on doing a 100% complete map of the customers requirements, all the way down to having accurate mock up screen shots of every single screen in the system (not just sketches, but with the intended, final layout down to the pixel). It took three sessions lasting about 8 hours each (the designers worked out screen shots in between sessions), and everybody hated it! The customers representatives got grumpy, the designers felt that they were falling short of the requirements and I got really worn out getting everybody through this endavour. But in the end, the result was a product delivered on time and completely without (any known) bugs.

    10. Re:Techniques don't make up for a bad schedule! by Rob+the+Bold · · Score: 2, Funny
      We developed a rule of taking the engineers estimates and double them.

      I've found a more reliable estimation rule is to take the estimate, double it, and change units to the next larger (common) increment of time. E.g. 2 hours => 4 days, 5 weeks => 10 months.

      --
      I am not a crackpot.
    11. Re:Techniques don't make up for a bad schedule! by Aceticon · · Score: 2, Insightful

      From a cursory look at the article i got the impression that the "tricks" listed boil down to "doing what should've been done in the beginning during analysis".

      Starting a project without gathering requirements, scoping the project, hammering the list of business rules and doing a high-level design is a great way set the project up for getting out of control after a couple of months, even without the extra pressure.

    12. Re:Techniques don't make up for a bad schedule! by Aceticon · · Score: 2, Insightful

      If you feel like your project needs some sort of methodologies in place, but "you don't have the time", the answer is simple, it's not that you don't have the time, you don't have the right personnel. It's true if you have no one with the experience of delivering the architecture required in a professional and timely manner then taking on methodologies new to everyone on the team is going to take time and lots of it. A good manager however will make sure that the project is correctly resourced.


      Unfortunately, from my experience, there seems to be both a lack of business analysts with the experience and ability to create a well-documented, internally consistent set of requirements and of senior designers/developers that actually figured out that the secret of speed in software design/development is to take some time of in the beginning for preparation.

      And please, don't get me started on clueless managers ...
    13. Re:Techniques don't make up for a bad schedule! by samkass · · Score: 1

      We developed a rule of taking the engineers estimates and double them.

      Doubling, tripling, or whatever is the naive approach to estimation. The problem with it is that while you'll probably be closer to reality the first couple times, especially with a young engineer or manager, you'll never improve your estimating ability. In order to improve your estimates, you have to try to make truly accurate estimates. If there is an overrun, there is something in the task list or the process itself you didn't estimate properly. (The last statement may seem obvious, but is often overlooked.)

      Now, why does the "double what I'm told" technique tend to work? Because always "doubling" (or more) the estimate each time someone gives you one implies many layers of management and approval, which tends to increase the time (eg. if the original estimate required 2 "doublings", it implies 2 layers of management approval). So the original estimate should look at the org chart and take into account layers of approval required for each major decision, and use that as a multiplying factor (a deep vertical decision structure in a company acts as a multiplying factor because it applies to each major decision.)

      The other obvious problem with this approach is that the estimation of a project is *not* the engineer's responsibility. It is the tech lead and/or manager's responsibility. The engineer has very little insight into bug rates, QA resource scheduling, meeting schedules, approval processes, etc. So if you sum the estimates for all features and double it, you're reneging on your responsibility for specific estimations and simply assuming you (as the manager) will add a 100% overhead to the project.

      --
      E pluribus unum
    14. Re:Techniques don't make up for a bad schedule! by MickDownUnder · · Score: 1

      True finding the right resources is hard. But it's not impossible. I think even if your team does not have the right people, and you don't have the experience, long term it is far better for a company to cultivate it's own product development process. I think if you're in there for the long hall you want to be continuously improving your company's software development process. There's enough help out on the web that will enable you to grow your staff and help get your company heading in the right direction on the CMM scale.

    15. Re:Techniques don't make up for a bad schedule! by Scarblac · · Score: 1
      1. Don't guess in actual days, just use something abstract like "points". Initially start with something like "1 point = 1 day", but it's really best to forget that.
      2. Don't let a single person make a guess, do it as a team - everybody writes down their guess, then everybody shows theirs.
      3. There are usually some outliers. Let the worst pessimist and the worst optimist explain their positions, then do a second round if necessary.
      4. Keep track of the actual time the feature/project/whatever takes.
      5. Over time, find out how many days "1 point" actually means for that team, and your estimates will improve over time.
      --
      I believe posters are recognized by their sig. So I made one.
    16. Re:Techniques don't make up for a bad schedule! by dubl-u · · Score: 2, Interesting

      Any project that you forecast is going to take longer than 3 man weeks ie 120 hours needs some sort of design in place to ensure that the major architectural constructs are already decided before coding takes place.

      I agree completely that one should spend time making sure the design is right. But I disagree that it should all happen before starting coding. You will never know less than at the beginning of the project. Improving the design should be a continuous process; then you get to take advantage of new information. Including information on how well your previous design theories are working out in practice.

    17. Re:Techniques don't make up for a bad schedule! by dubl-u · · Score: 2, Insightful

      We would take the estimates, double them and add 30%, that is how I bid out all work.

      An easier approach is to measure progress.

      Divide your project into microfeatures, deliverable units of work that are either done or not done and take less than a week to build. Estimate each microfeature on a simple complexity scale (I like 1/2, 1, 2, 4; anything above 4 gets split into smaller features).

      Then just start in developing and see how many units of work get done each week. Even a manager can see that if you got 5 units done each week this month, he should expect you to get 5 done each week in the future.

      The advantage of this, besides the simplicity, is that you can then let the suits trade scope against schedule and you don't have to be involved. If they want the project done sooner, they should pull features out. If they want to add stuff, that means they're shifting the end date. Either way, the devs just keep popping features off the stack and making them work.

      That's how I do it now, and I love it.

    18. Re:Techniques don't make up for a bad schedule! by itwerx · · Score: 1

      We developed a rule of taking the engineers estimates and double them.

      We quadruple them, and then deliver under budget and on time.
            The lesson here is that 99% of the time bad scheduling happens because of people setting (and accepting) unrealistic expectations. If programmers (and their managers) resisted promising the impossible in the first place there'd be a lot less of this sort of thing going on across the board...

    19. Re: Techniques don't make up for a bad schedule! by gidds · · Score: 1
      Agreed. However, I can understand why many people want to reject the big methodologies: because they've seen them applied wrongly.

      A methodology is a framework for thinking, not a replacement for it. Too many people seem to think that a methodology lets you fill in the boxes, join the dots, perform the right steps, and Hey Presto! your project will be perfect. Some methodologies even seem to advertise themselves that way. And that's a recipe for over-long projects, pointless busywork, overengineering, and difficulty in changing anything.

      Instead, I find it most useful to see a methodology as set of tools. Get to know them, pick the ones that work for you, and use them as you see fit.

      You mentioned UML. Lots of people understand UML class diagrams, for example, which makes them very useful for communicating an OO design. But you still need to have a design worth communicating! Use cases are a great way of thinking about requirements and UI design, but you still need to do that thinking. And so on.

      If you're taking time at the start of a project to do some good design work, and you happen to be using UML to help that, then fine; but I 'd be less happy at the idea of taking time at the start of a project just for the sake of 'doing the UML' merely because that's what you've been told to do.

      --

      Ceterum censeo subscriptionem esse delendam.

    20. Re: Techniques don't make up for a bad schedule! by gidds · · Score: 1
      But that's a story for another day..

      [fx: checks the calendar]

      It's now another day :)

      --

      Ceterum censeo subscriptionem esse delendam.

  3. Printer friendly version by tcopeland · · Score: 4, Informative
  4. Smart? by qbwiz · · Score: 4, Insightful

    It seems to me that if you have an impossible schedule, then you've already failed.

    --
    Ewige Blumenkraft.
    1. Re:Smart? by Monkelectric · · Score: 5, Insightful
      Thank you. As a Software Architect, I'd like to say you are 100% dead on. I can spot a deathmarch project from the next county, and they *ALL* begin with phrases like "The market window for this product is..." or "We have to complete this by XXX or we all die" or my favorite, "My research shows every month we don't have capability X we loose Y dollars."

      The appropriate response to any of these is "You should have proposed this project X months ago (where X is a conservative estimate."

      --

      Religion is a gateway psychosis. -- Dave Foley

    2. Re:Smart? by WasterDave · · Score: 1

      Yes, but no specifically in regards to this article.

      What the article says is "when faced with impossible demands from management, do a quick but brutal project plan that shows what the actual realities are". I.E. blast through this and come back with what the real schedule is.

      I was disappointed that it didn't mention my all time number one schedule shortening trick though: lose features. Brutally. Slaughter the bastards. Keep slaughtering until someone says "but if it doesn't do that then what's the point". Now work out how it's going to be made, who'll do the work and how long it will take. If that number is "too long" then go somewhere f*cking else because this one is doomed to failure.

      Dave

      --
      I write a blog now, you should be afraid.
    3. Re:Smart? by Anonymous Coward · · Score: 1

      RTFA - If you have an impossible schedule, that just means your project is going to be late. Is there any programmer who hasn't delivered a late project at least once? The goal is to keep it from being even later, and that's what this article is about.

    4. Re:Smart? by Anonymous Coward · · Score: 1, Interesting

      The appropriate response to any of these is "You should have proposed this project X months ago (where X is a conservative estimate."

      And then you:

      a) get fired.

      b) get yelled at by your boss for making his company seem slow and incompetent.

      c) lose the contract to that company that lies and says they can do it faster than your accurate estimate.

      d) all of the above.

    5. Re:Smart? by Anonymous Coward · · Score: 1, Insightful

      And if you do get fired for this you don't really want to be working for that company anyway. They just did you a big favor.

    6. Re:Smart? by Fulcrum+of+Evil · · Score: 2, Insightful

      And then you: a) get fired.

      And then you go compete with that company and bury them because they don't know how to schedule and, most likely, can't prioritize features because they never listen to their engineers.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    7. Re:Smart? by Bacon+Bits · · Score: 4, Insightful
      And then you:
      a) get fired.
      b) get yelled at by your boss for making his company seem slow and incompetent.
      c) lose the contract to that company that lies and says they can do it faster than your accurate estimate.
      d) all of the above.

      Do not lie to your customers when you make a quote for them just to get one contract. Be honest about everything. The most important customers are repeat customers, and you will be #1 on their list if you get them a quality product on time and on budget.

      Losing one contract is no big loss, particularly when you know for a fact that your competition cannot possibly make the goals they're quoting. They will look like fools when they ask for time and budget extentions or fail to produce anything usable, and nobody likes to do business with a fool. As they say, people might not know the difference.

      Certainly there will always be competition that lies to get the sale and customers that make poor decisions based on unrealistic quotes. Dishonest business and mismanagement are commonplace. That doesn't mean you should compromise your quality or ethics. That's called "professionalism". Customers worth doing business with appreciate that, and you will attract repeat business and new customers through word of mouth.

      --
      The road to tyranny has always been paved with claims of necessity.
    8. Re:Smart? by Anonymous Coward · · Score: 0
      Do not lie to your customers when you make a quote for them just to get one contract. Be honest about everything. The most important customers are repeat customers, and you will be #1 on their list if you get them a quality product on time and on budget.


      You will be on nobody's list if you give them reallistic schedules. Customers are more prone to change their provider than their mind. If you are honest, somebody else will lie to them and get the contract. The sad part is that you will never hear from that customer again, no matter what you do.
    9. Re:Smart? by jrumney · · Score: 4, Insightful

      You will be on nobody's list if you give them realistic schedules.

      On the contrary, in my experience companies tend to come back to you to ask you to clean up the mess made by the low bidding cowboys when they realise that you were just being honest with them. At this stage you can often get away with jacking up the rates too, as they have made that realisation that you get what you are willing to pay for.

    10. Re:Smart? by kl76 · · Score: 1

      And then you go compete with that company and bury them because they don't know how to schedule...

      And then you go compete with that company and the customer still chooses them, for political reasons...

    11. Re:Smart? by Tim+C · · Score: 1

      You kind of imply this in your post, but it bears being explicit about it - companies that regularly quote low then fail to deliver to the quote generally start to get a reputation for themselves. That sort of reputation you don't want.

    12. Re:Smart? by MickDownUnder · · Score: 1

      You are speaking from a service related software development experience. It's quite a different dynamic when you are producing software for a market as opposed to a particular client. Lost market opportunities offer significantly more pressure than the prospect of losing a single customer. I think it's far easier to resist schedule pressures when there's a single customer at risk. Markets tend to be far more ruthless and less forgiving, schedule blow outs can lead to death for a business, when the market is lost to a competitor.

      I think there is a minimum time a software project can be completed in, and in large projects achieving this minimum time, almost never would involve the omission of documentation and employing methodologies.

      If this minimum time is greater than the time available then compromises need to be made with either your software development process or your business goals.

      The key to success in the software business is to be pragmatic, to have the right balance between software and business requirements. Development techniques such as Extreme Programming and methodologies such as UML are very flexible and can add value with even a minimal amount of time spent employing them.

    13. Re:Smart? by g2devi · · Score: 4, Informative

      I was in this position twice, in succession.

      In the first case, my company tried to break into the professional market (we were big in the education market) so we announced a major overhaul and several new new features. It was a fantastic vision but unfortunately the president made the mistake of announcing the full feature set and that we would start accepting purchase orders that summer. By the time spring rolled around it was clear that were were going to miss the deadline by several months (very bad when most of your sales are in September), but since the feature set was set in stone, we couldn't cut features. The writing was on the wall but we accepted it and started working 13 hour days nonstop for 6 months. Customer complaints over late orders flooded our phone lines and prevented our previous customers from calling tech support, so our old customers felt neglected and our new ones started cancelling orders. We gave up in christmas and released the complete but buggy product and got more complaints.

      The president was replaced, and under his leadership we were able to finish the product we wanted to finish within a reasonable schedule. Depite all the doom and gloom earlier, we survived. Unfortunately, we lost the senior software engineer and another developer in the process.

      Then, president hired a vice president which wanted to revamp the whole product and move it to an even higher market. I gave a detailed estimate that said it would take 2 years. The VP said we'd go bankrupt if we didn't release in 9 months. I repartitioned the estimate and said that we could do it in two stages, each 13 months long or three releases each 9.5 months long. No go. It had to all be done in one release, and that release could take no longer than 9 months or we might as well close up shop. I came close to losing my job over the issue, but since I was the most senior programmer there with the most experience about the product, the new senior software engineer told the VP if I went he'd have to give up too. 2 years later, after a complete turn over of the team twice (including the new senior programmer), the product was finally release It had more bugs than we'd like, but it was recieved well by the market so it was "good enough". At release time, I was the last person standing from the original team, but I had enough and left soon after. The product was well received but since the team was new, a new version of the product wasn't released into three years later.

      All the VP's threats didn't change an impossible schedule. You can't squeeze 2 years of work in 9 months, not matter how you try to force it. If you try, the most you can do is destroy your team and lose sales in the process. Most of those doom and gloom professies don't pan out. If they *are* true, someone is running the company wrong and development schedules are the least of your problems.

      In the later case, had the VP chosen either a more reasonable schedule (like any of the 3 I laid out above), we would have had most if not all of our original team at the end and been able to do subsequent releases at the same measured pace. We would have had regular sales and the company would have prospers much more.

      Being a software architect or project manager is hard, but ultimately, the best ones just lay out out all the credible options on the line and stick to their guns, even if it means risking your job. My experience in that job showed me that you can do it even in a hostile environment. If you lay things out properly and tell the truth, you may be resented, but you will be respected, even by those who chose to ignore your advice.

    14. Re:Smart? by MCraigW · · Score: 1
      And if you do get fired for this you don't really want to be working for that company anyway. They just did you a big favor.

      Yeah, because it's easy to pay the mortgage when you're out of work and can't get a job anywhere because you were fired from your previous position.

      My method of estimating projects where there is a set deadline is to make my estimates as honestly as possible, and when the manager says that he thinks it will only take nine months rather than two years, I say "Okay", and start working.

      And if I feel it is necessary to change jobs, then rather than getting fired, I can interview while I still have a job.

    15. Re:Smart? by BillAtHRST · · Score: 1

      "Losing one contract is no big loss" -- it is if it's the only one in the pipeline. Many small software development shops (like mine) find it difficult to balance the sales and marketing needed to keep the pipeline full with doing the work needed to deliver on previous commitments. That doesn't make it OK to lie to customers, but anyone who has never had to "sharpen his pencil" when coming up with a quote for a customer is simply not living in the real world.

    16. Re:Smart? by qwijibo · · Score: 1

      As a contractor, I ignore the calendar and look at hours (which is exactly the same as a cost, but without telling them the cost is fixed). If that means working 80+ hours per week for 6 months to make it happen on their timeline, that means I get to bill 2000 hours in 6 months. It's still a death march project, but when they're paying for their lack of planning, it's much more noticeable than when FTE's get stuck in a death march. Often times, the schedules are intentionally made unreasonable to keep the costs down and pressure up. While it's nice to be able to say "This will take X months", business people are more inclined to comprehend "This will cost $Y in time whether you want it done in X months or X/2 months." It's a polite way of telling them that they can have it in the unreasonable time if they really want it, but it's still going to cost them the same as if they had a reasonable timeline.

      We're currently doing one of those types of projects - half the staff and half the time of the last time we did something similar. Seeing as the last time went way over budget, they're more amenable to negotiating which features will be available at which phase in the project. Of course, I think they're only flexible because they know I'm serious when I say that I'll work 80 hours a week to get everything done on time if they are willing to pay for it. =)

    17. Re:Smart? by StormReaver · · Score: 1

      "Do not lie to your customers when you make a quote for them just to get one contract. Be honest about everything. The most important customers are repeat customers, and you will be #1 on their list if you get them a quality product on time and on budget."

      My most recent client tried hounding me for a completion estimate when the project first started, but I refused to give one. I also refused to give a flat bid. I explained to my client that any estimates I gave him would be wild ass guesses, and would reflect reality in any way, shape, or form only by a phenomenal stroke of good luck. I told him that anyone who could give him a realistic estimate would be either lying or padding his bid enormously. I told him that since he has unique needs, and since he didn't know the totality of those needs, the time to completion could not be derived from any past experience anyone had.

      I told him that the only way I would be willing to write his software was on an hourly basis, and with weekly deliveries of my progress. He could terminate our contract at any time he became dissatisfied with my progress. I already had a full time job, and could afford to be brutally honest with him. I knew that I was also already his last resort, as he had tried locally and nationally to find someone willing and able to rewrite his entire office operation system.

      I held nothing back, promised nothing I couldn't deliver, and kept all the promises I made. He was not happy at first, as he wanted the whole thing done yesterday. However, he accepted my terms -- no promised completion date, no promise that it would even be completed, an hourly rate, and he had a right to weekly demonstrations of my progress.

      The software was completely in exactly one year (I started January 1, 2004 and finished January 1, 2005), went into production the day it was completed (to my terror and against my advice) as a total replacement for the old system, and has worked like a champ for over a year and a half.

    18. Re:Smart? by Anonymous Coward · · Score: 0

      "Do not lie to your customers when you make a quote for them just to get one contract."

      Howabout if you do that to get every contract?

    19. Re:Smart? by dubl-u · · Score: 2, Interesting

      I can spot a deathmarch project from the next county, and they *ALL* begin with phrases like "The market window for this product is..." or "We have to complete this by XXX or we all die" or my favorite, "My research shows every month we don't have capability X we loose Y dollars."

      I don't have a problem with that, really. The trick is to only give the suits levers you want them to pull. The deal I make with my clients is that I control the estimates and they control the scope. I estimate each feature; they decide what order to do them in and when they want to release. Then the dates are their problem.

      Once you break them in, they like it fine. It's just like going shopping: you put more in your cart, and you pay more at the checkout. Want a smaller bill? You put less in your cart.

    20. Re:Smart? by Anonymous Coward · · Score: 0

      That's actually my companys business plan... Quote projects high, using good quality parts, software, whatever, estimate sufficient time for a junior engineer to complete the project, put that time at a senior engineers rate, then inflate the cost and delivery time estimations by 30%. we loose probably 75% of all initial jobs from new potential customers because our prices are high, but we usually get more small repair jobs later at a higher profit margin after the company realizes we actually know what we are doing, and what the best parts are. I had one client that was constantly fighting with some ultra cheap software package developed by a small company in the region. They realized that they were paying thousands of dollars a month to modify the program to do what they needed (and patch is bugs). Finally they called me back and had me order the package I had originally recommended. Cost roughly 3x the price of the other package, but the estimate is that they saved about 25000 in maintenance fees in the first year.

  5. Code reviews by tcopeland · · Score: 2, Interesting

    I was kind of suprised to see the recommendation for formal code reviews. In my experience those end up either as "hurt feelings" slugfests or, just as ineffectively, full of "you should put a space after this brace" comments. I feel that pair programming is more effective way of getting multiple eyes on the code, spreading knowledge around, training the new guys, and all that good stuff.

    And of course there's always static analysis to catch any problems that do manage to sneak in there...

    1. Re:Code reviews by bill_kress · · Score: 2, Interesting

      What kind of a group do you work in? Sheesh! Perhaps what you need is some training and a little maturity. Shouldn't any kind of suggestion be considered an oppertunity to learn? And when two teammates argue, there should be a lead/architect/manager that can tell which approach is better, at which point the decision (if it was really that tough) should be documented and added to your groups' coding standards.

      I'm not saying code reviews are the end-all be-all, but is static analysis really going to tell you about the most important part of coding, eliminating all redundant code (fully factoring your code)? If you've got your code factored well enough, you really can't screw up too bad since any fix is going to be limited in scope and probably pretty simple to fix--and this is what your code reviews really should be doing unless you have really really screwed up code to start with.

    2. Re:Code reviews by _Upsilon_ · · Score: 1

      Pair programming works well, but it can still lead to oversights and other issues. It helps to have a reviewer that has no personal attachment to the code, to get a truely critical review.
      Mind you, this can also be solved by picking appropriate people to pair with, and having the person not 'driving' being critical enough.

    3. Re:Code reviews by kiran_n · · Score: 2, Interesting

      The problems you mention (as regarding formal code reviews) would tend to get compounded in pair programming - the main factor being - does the pair get along well enough to be able to work as an excellent team. Even if they can - you are really putting two resources where one (and some more) can get the basic job done. Pair programming is effectively replaced with a combination of good old fashioned mentoring and code reviews!

      --------------

    4. Re:Code reviews by cerberusss · · Score: 2, Insightful
      In my experience those end up either as "hurt feelings" slugfests or, just as ineffectively, full of "you should put a space after this brace" comments.

      Aye here. I've experienced this a number of times and started thinking about it. Generalizing a bit, most developers who like to do code reviews, like to do all sorts of things throughout a week (set up a build system, do some design, code a module, do some testing). However, these are exactly the same developers who often have trouble with the nitty-gritty details.

      Code reviews should be done by developers who hate code reviews, and should be concentrated on the meaning of the code and what could be missing.

      Coworker doing a review: "Hm, this function looks a bit big, maybe you should split it."
      Me: "OK, good idea. But do you think these 500 lines cover the problem, or have I missed something?"
      Coworker: "Umm, it looks OK".
      Me: "Well, maybe you should give it some thought?"
      Coworker: "I have, and it looks OK. Hey, you have some duplication here."
      Et cetera.

      --
      8 of 13 people found this answer helpful. Did you?
    5. Re:Code reviews by Bodrius · · Score: 5, Interesting

      Although I think pair programming can be great in many contexts, I think they really have mostly complementary advantages:

      a) An in-depth code review (formal or not) has a big difference from pair programming: the analysis is done by a fresh pair of eyes. Pair programming can result in two people who are too close to the code to detect flaws in their underlying assumptions.

      In my experience, code reviews are not that useful to detect syntax or style errors, nor do I think they're meant to be. That's the kind of thing you can automate with a tool anyway. If you're spending all your time looking for that, I agree most people will feel it is a waste of time.

      But code reviews can be extremely useful at a higher level: to detect design gaps and flaws in the implementation, or just get improvement suggestions that a fresh set of eyes ban provide, once you see the whole solution.

      Often the very process of explaining the whole solution top-down after implementation allows you to detect issues. Other times you can identify common patterns and needs in different features that we're not visible before ('hey, I had to do the same thing elsewhere and we have a common utility class/method for this that avoids this obscure bug here').

      b) I don't see how it should be that different regarding the attitude problems you are describing.

      If people get so easily offended by a code review, it seems to me it'd be because of team problems bigger than a code review process: either the programmer thinks their code is perfect (which is something to fear) or they don't trust their peer enough to have honest conversations about code.

      I guess this is the one advantage of pair programming, it forces people to work closely and practically guarantees that trust. But I do not think you need to lock two people in a room and do everything together for them to trust each other professionally in a healthy work environment.

      Heck, code reviews should be fun.

      They're peer conversations about code, and if you enjoy programming it should be fun to argue techniques and solutions with your colleagues, even (specially?) when there are strong disagreements. Both sides typically learn something from it; even if a lot of times it is not something you want or need to change in the current code, it will be useful knowledge elsewhere in the future. Just like college or academia, for that matter, back when coding was done for fun.

      --
      Freedom is the freedom to say 2+2=4, everything else follows...
    6. Re:Code reviews by Brandybuck · · Score: 2, Interesting

      1) Pair programming doesn't count for code reviews, because the "reviewer" is vested in the code.

      2) If your code reviews end up being "slugfests" and nitpick sessions, then you're not running them right.

      --
      Don't blame me, I didn't vote for either of them!
    7. Re:Code reviews by Bodrius · · Score: 2, Interesting

      After I RTFA'd, I realized I would agree a bit with you if code reviews were typically performed as described in the article, although for different reasons.

      They're not only suggesting a formal code review (with fancy printouts and email tracking and logs and supervision and lots of program management stuff). They're suggesting team-wide formal code reviews.

      Although they do suggest being selective about the pieces of code to review, and this can be very useful for very critical code, in most cases such a wide meeting will feel like a waste of time except for the smallest of teams. There's a population count and a level of detail at which a meeting has diminishing returns, because it's difficult to keep everyone focused and communication gets tricky in disagreements.

      I think narrower code reviews, in both scope and audience, are far more useful to improve quality. It also makes it easier to keep it at the peer consultation level rather than an inquisitorial mood.

      --
      Freedom is the freedom to say 2+2=4, everything else follows...
    8. Re:Code reviews by Anonymous Coward · · Score: 4, Insightful

      The message your coworker was giving you, that you missed, is, "Hey, this code is illegible! For starters, how about splitting up this monolithic function into something remotely comprehensible, and then maybe I could give you some useful feedback."

      No charge for the clue.

    9. Re:Code reviews by Anonymous Coward · · Score: 0

      I feel that pair programming is more effective way of getting multiple eyes on the code, spreading knowledge around, training the new guys, and all that good stuff.

      Pair programming sucks. Sitting within 6" of a coworker 8 hours a day after day after day is not my idea of fun. And try pairing men and women together - sounds good on paper, but leads to plenty of awkward moments due to the close physical proximity. I've even witnessed a woman+man pair team turn in to a stalker+stalkee saga ending with the stalkee leaving the company.

      Code reviews work just fine, and have been proven to be more effective (quicker+cheaper) at finding bugs than all forms of testing combined (McConnell's Code Complete 2).

    10. Re:Code reviews by AuMatar · · Score: 1

      Pair programming is the worst form of code review. I include the option of "absolutely none" in that statement. Not only does it devolve into that same slugfest in about 20 minutes, but the back and forth on even simple things causes it to be slower than just writing code, yet takes two people. And very few bugs are found in the process.

      A well run code review does not go into slugfests. I personally like how my company does it- we have a web based program that shows the effected files (with the diffs in different colors). We email the team with the URL, and 1 or more people will read it and comment. Typical comments are "I don't understand the purpose of block X" (in which case you explain your logic), "function y is not commented sufficiently" (in which case you comment more), and alternative architectural suggestions which may be more maintainable. I have never seen a "Put the brace on the other line" or the like. The email rounds complete until either all objections are trivial (and are just done and checked in) or there are no more objections. All changes are reviewed. Its low overhead, and gives 100% coverage of the code by at least 1 reviewer.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    11. Re:Code reviews by unsorted · · Score: 1

      What surprised me is that they want you to collate all the review comments in an excel sheet. Being asked to put code comments in an excel sheet is one of my pet peeves. It's never effective in my experience. If people know they'll have to write it up in excel, then they tend to be conservative in the review itself - you'll mostly see four or five vague comments like "refactor ". Marked-up printouts (as the authors themselves suggest) are the best means of doing code reviews. Just make sure you preserve the printouts for follow-up reviews (and in case your company's "process" or "quality" dept starts hounding you).

    12. Re:Code reviews by StrawberryFrog · · Score: 1

      In my experience those end up either as "hurt feelings" slugfests

      The recipient of the review should in that case, grow up. Unless the reviewer is being unnecesarily nasty, in which case they should grow up.

      or, just as ineffectively, full of "you should put a space after this brace" comments

      Find or grow a code layout standard. Use it. debates on the topic should then run like this: "Minor differences to layout standards on lines 35 to 45", "Noted and will fix. Next?".
      For even more fun, find a code beautifier that will add the space for you.

      --

      My Karma: ran over your Dogma
      StrawberryFrog

    13. Re:Code reviews by MickDownUnder · · Score: 1

      I agreee... pair programming is definitely far better than code reviews. Pair programming is in fact like an on the fly code review. The "hurt feelings" come from people getting too attached to code they have written, when pair programming the attachment never has a chance to take hold as the changes that would come with a review are often made on the fly.

      In a situation where you are willing to throw unlimited resources at a software feature to get it implemented, you would choose pair programming every time. Unless the code is really critical further code reviews of pair programmed code are probably not necessary, and the changes that come out of a review are most likely going to be far less substantial than what may have eventuated from a single developer's work.

      However this is not to say I would always use pair programming in preference to code reviews. On a tight budget with less time pressure you may consider code reviews, as it takes far less man hours to review code than it does with pair programming. In a review you tend to skim much of the hum drum (but necessary) parts of the code and focus on where the real meat of the problem is dealt with, to attain how it has been tackled or if it has been implemented as per the design.

      I would estimate pair programming takes up about 80% more man hours than code reviews, excluding the odd result of a code review where a developer really makes a major stuff up and a complete re-write is required.

      I would tend to use pair programming in two situations: when training a junior up (till they become productive on their own) or on critical jobs (ie jobs on the critical path, that if not completed on time will delay other jobs or tasks) and code reviews for everything else. As for "hurt feelings" with code reviews; get over it; get professional.

    14. Re:Code reviews by scaramush · · Score: 1

      I'm often called to do code reviews, but even with checklists, I'm always concerned that I'm not providing quality feedback. Does anyone have any suggestion on ways to improve the quality of my code reviews?

      Other than hanging out with people who do good code reviews, does anyone have any suggestions on how to improve one's code review skills?

      --
      "...you can steal my woman, but you ain't done nuthin' smart."
    15. Re:Code reviews by dubl-u · · Score: 1

      The message your coworker was giving you, that you missed, is, "Hey, this code is illegible! For starters, how about splitting up this monolithic function into something remotely comprehensible, and then maybe I could give you some useful feedback." No charge for the clue.

      Amen to that. As Martin Fowler says, "Any fool can write code that a computer can understand. Good programmers write code that humans can understand."

    16. Re:Code reviews by dubl-u · · Score: 1

      Pair programming can result in two people who are too close to the code to detect flaws in their underlying assumptions.

      For teams doing pairing, the standard recommendation is to swap pairs every few hours. I find that changeover very valuable; as I quickly explain to the new pair what I'm up to, I have to think over the big picture again. That makes both of us more likely to catch something.

      I also prefer to do pairing in a war room with the rest of the team. Then it's easy to start an ad-hoc design review session when you come across some broader issue.

    17. Re:Code reviews by nonsequitor · · Score: 1

      I've actually had code reviews be very helpful, it really depends on who's running the show. The last formal review of my code was done by 5 senior developers, myself being a junior developer writing baseline code for a new feature in an existing product. Basically they reviewed my code on their own time, followed by a 2 hour meeting in which each issue from all 5 reviewers was brought up on an overhead projector. The types of things I got hit for were things you don't learn in school about embedded programming. It was mostly about how to save a few bytes here and there with C code, since my design had already passed a design review a month previous.

      The issues that were raised had nothing to do with whitespace or style, but mostly when to use MACROs instead of functions, which functions should be inline, etc... Of course for a quality code review, you need high quality reviewers who conduct themselves professionally. Working as a consultant there was a treat, on a team of several hundred developers on multiple continents, the development had just the right amount of red tape to support that many developers, testers, field techs, etc...

    18. Re:Code reviews by cerberusss · · Score: 1

      I was giving an example. My point is that often code reviews go for simple things like indentation and legibility rather than functionality. While all are important, the project can't be finished if not for the latter.

      --
      8 of 13 people found this answer helpful. Did you?
  6. You can explote your coders better by outsourcing by sapgau · · Score: 1

    Well if you are desperate or evil enough to not give a damn about keeping a well motivated and trained staff (which will reflect on the product) then by all means outsource it to other parts of the world, you will be a fool not to.

    /cut to the point.
    //If you start with an impossible schedule wouldn't that be a bad sign to start with?

  7. Easy! by gillbates · · Score: 5, Funny

    Stop reading slashdot!

    --
    The society for a thought-free internet welcomes you.
    1. Re:Easy! by Ulrich+Hobelmann · · Score: 1

      And read Edward Yourdon, Death March, which already covers this topic.

      I'm not sure why I should read the above linked article, so maybe I won't.

  8. Why do people buy into this nonsense? by gubachwa · · Score: 5, Insightful
    Replace the title with one of "Smart Bridge Building on an Impossible Schedule", "Smart High-Rise Construction on an Impossible Schedule", or "Smart Heart Surgeries on an Impossible Schedule", and I ask you, how many people would want to cross that bridge, live in that building, or get that surgery? No one!

    "Smart ... on an Impossible Schedule" is just management/corporate speak for "How to minimize the crapiness of a project when we know we can't spend the proper time required." You can dress it up all you like with sleak catch-phrases, and call it a rose if you want, but it still stinks.

    1. Re:Why do people buy into this nonsense? by rtaylor · · Score: 3, Insightful

      Smart High-Rise Construction on an Impossible Schedule

      Done regularly actually. The big difference is that the impossible schedule dramatically increases costs (heating in winter for year-round construction, running three crews in shifts for 24/7 construction), etc.

      For some reason "Impossible Schedule" in software development means cutting corners instead of increasing manpower.

      --
      Rod Taylor
    2. Re:Why do people buy into this nonsense? by Joebert · · Score: 2, Interesting

      Mod parent Insightfull.

      I think the prime difference is that buildings have a much greater lifespan than software, so it's alot easier to justify the increased cost of a building.

      --
      Wanna fight ? Bend over, stick your head up your ass, and fight for air.
    3. Re:Why do people buy into this nonsense? by sapgau · · Score: 2, Insightful

      It might reflect how "immature" the programming profesion still is. The moment you have a larger team in software development you immediately have delays due to coordination among team members and problems with integrating components. You better make sure that everybody is on the same frequency so nobody steps on each other's toes and that scope creep is not allowed to run rampant.

      Because software is something of a virtual product, people think that is very easy to make changes along the way. You wouldn't see an architect or a civil engineer accept fundamental changes to the design: "Oh how about moving the elevator shafts to the side and making space for a swimming pool on the 10th floor?"

    4. Re:Why do people buy into this nonsense? by pnatural · · Score: 4, Informative

      For some reason "Impossible Schedule" in software development means cutting corners instead of increasing manpower.

      Because that's all you can do (in general). Adding man-power to a late software project only makes it later, as was shown by Brooks some 30 years ago.

    5. Re:Why do people buy into this nonsense? by Ohreally_factor · · Score: 3, Funny

      And more recently, Allchin. =)

      --
      It's not offtopic, dumbass. It's orthogonal.
    6. Re:Why do people buy into this nonsense? by unimacs · · Score: 1

      Because the consequences of a bridge failing, a botched heart surgery, and a collapsed high rise are usually far more serious than Microsoft Word crashing. I agree that if you're working on a Space Shuttle navigation system, you need to follow a process/documentation heavy methodology. On the other hand if you're working on a website for "Joe's Bait shop", you probably can get more than satisfactory results on a budget and schedule that Joe can actually afford and will work for him if you don't go through all the same steps. The fact is that in many cases software that's lacking in some important features is still better than no software at all. Even software that's got some bugs can be better than not having it available for those willing to put up with the quirks. Right now I'm working on a website that needs to be up pronto or a real opportunity will pass. It's painful knowing that we'll have to leave off some things we'd really like on it. It's also painful knowing that some of the code I write today will be likely be thrown out down the road, but that's better than not getting the site up when it needs to be up.

    7. Re:Why do people buy into this nonsense? by shawb · · Score: 1

      Ahh... but engineers do make changes to the project without going back. Like in Sampoong or Kansas City.

      --
      I'll never make that mistake again, reading the experts' opinions. - Feynman
    8. Re:Why do people buy into this nonsense? by Kamineko · · Score: 1
      Smart-ass on an Impossible Schedule?

      I loved that movie!

    9. Re:Why do people buy into this nonsense? by mrbooze · · Score: 1

      If it's done regularly it is by definition not an impossible schedule. Heck, if it's done regularly, it's not even an improbable schedule!

      And increasing manpower can only get you so much benefit, or as an old boss of mine used to say: "It takes a certain time to bake a cake, and you can't speed it up by turning up the heat or hiring more chefs, unless you really don't care what it tastes like."

      Certainly if you don't have enough people, hiring more will help, and there is some window beyond that where additional resources can improve efficiency, but there will always be diminishing returns at some point. Sometimes a schedule really just is flat out impossible.

    10. Re:Why do people buy into this nonsense? by sd4l · · Score: 1

      Damn, and I'd moderated in this thread too! Oh well....

      The reason "Impossible Schedule" in software development means cutting corners instead of increasing manpower is down to a idea put forward by Fred Brooks in The Mythical Man Month. Basically, in construction the foreman knows the details and tells workers "build a column x feet high by y feet square here" and the worker does it. If you need to bring a new worker in to meet an impossible schedule then you just tell them to build their columns and they get on with it at the same speed a worker that was already working on the project does.

      In software it's different. Imagine coming in (late) to a project with a million lines of code and being told "we need to make the font size configurable throughout the application, so create an item in the preferences dialog, store the preference and ensure everywhere uses this preference". It would take a fair while to find your way around the code which wouldn't be a problem for a programmer already on the team.

      That's why it's not a simple answer of "this software's running late, throw another 20 programmers on the job and get it done in schedule".

      --
      -- Andy Jeffries Scramdisk for Linux (Change the orgy to org to reply)
    11. Re:Why do people buy into this nonsense? by Anonymous Coward · · Score: 1, Insightful

      In software increasing manpower doesn't work. You just end up with more people that have to learn the ins and outs of the project. Read "The mythical man month". Small teams working on different componants is a good model, as everyone knows their bit of code inside out.

    12. Re:Why do people buy into this nonsense? by 1iar_parad0x · · Score: 2, Insightful

      because 'nobody' will 'see' it....

      In a business to business transaction there's little to protect a client from a bad development shop. Once you're in more than half-way on a project, there's little a client can do to stop the bleeding. Sure, you could have internally managed the project well from day one, but you chose the lowest bidder (or at least made a compromise). Do you halt development? Most software shops aren't to eager to pick up the pieces of a unfinished project. Also, a project that is late or over budget is often looked at better than a unfinished project. So you keep going, lying to yourself that 'outsourcing' (even domestically) is a good thing. The software shop, trying to meet a budget or perhaps just being unscrupulous, 'rounds the edges' realizing they've got they're client over a barrel. Sure, it tends not to foster long term relationships, but that's business*.

      *the big company anomaly: if your company has pedigree, this often isn't even a problem

      --
      What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
    13. Re:Why do people buy into this nonsense? by 1iar_parad0x · · Score: 1

      There's nothing wrong with these articles in themselves. It's only when these strategies are planned from day one that this becomes a problem.

      --
      What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
    14. Re:Why do people buy into this nonsense? by Anonymous+Brave+Guy · · Score: 2, Informative

      There's a lot of truth in Brooks, but you have to take it in context. Adding manpower to a late project may indeed make it later, but adding more manpower up-front and managing it well can increase the capacity of your team to deliver a project, and therefore get the work done sooner. You get diminishing returns to an extent, of course.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    15. Re:Why do people buy into this nonsense? by ambrosen · · Score: 1

      Sampoong was definitely the management at fault, not the engineers.

    16. Re:Why do people buy into this nonsense? by platos_beard · · Score: 1
      Ok, I'll admit to having drunk some of the Scrum koolaid, but I don't think 'maturity' is the issue. Programming is a qualitatively different kind of endeavor than bridge-building. Project management methodologies that try to define everything up front are doomed to failure. Once you build a bridge or a skyscraper, it's going to remain the same for it's lifetime. Not so for software.

      TFA sounds like scrum in some regards -- the setup of the feature list, the short implementation horizon. Especially the idea that you define features that will not be included, which suggests that the immediate development is only part of a process that will be repeated in the future to add more features. Repeat what's described in TFA every month and you're even closer to scrum.

      --
      What's a sig?
    17. Re:Why do people buy into this nonsense? by Idarubicin · · Score: 1
      Adding man-power to a late software project only makes it later, as was shown by Brooks some 30 years ago.
      That's why you don't add manpower to a late project--you have to design the increased manpower in from the start. The grandparent noted a couple of tricks used in construction, including three shifts for 24/7 work. If you have good specifications and a modular design, you can have several groups working independently on the project right up until a final integration. Heck, code all day and have a Q&A/code review/testing group work the night shift. Have teams of a half-dozen people working on one specific task at a time on staggered, overlapping round-the-clock shifts until the tasks are complete. This is just the stuff off the top of my head; there are probably a lot of other strategies that one could employ as well.

      Would these suggestions be costly to implement? Hell yes. Rushing a construction job is expensive too. When you need to have something done right and done soon, it will cost you. Fast, cheap, and good--you can only have two. Software doesn't escape that rule.

      --
      ~Idarubicin
    18. Re:Why do people buy into this nonsense? by SylvesterTheCat · · Score: 1

      "Smart Nuclear Power Plant Construction on an Impossible Schedule"

      Coming soon to your back yard!

    19. Re:Why do people buy into this nonsense? by rblum · · Score: 1

      If you actually bothered to read Brooks, you would discover that it's not quite as simple as that sound bite.

      Adding new people takes ramp up time and increases communication cost. Ramp up time is a one-time expense, so if you do it early enough you can recover the cost. Communication cost produces indeed diminishing returns the more people you add - unless you change the way you communicate. I.e. break into smaller teams, don't have everybody talk to everybody else.

  9. Good On Paper by Anonymous Coward · · Score: 4, Insightful
    I'm in a similar situation as this, but atm, without the death march schedule. I've had quite a bit of time to consider the things and here's my conclusion.

    1. Planning documents are a great thing and are pretty much invaluable to a team's success on a project. However, when you complete the document and the very same day, someone in upper management says, "Now this is a great document for you guys" and immediately starts making large changes (true story), there's not a whole lot you can do. Also, as every developer is aware, it is more than likely that the scope, goals, features, etc were never clearly defined in the first place which means you're either going to be wringing it out of management, playing guessing games or both.
    2. Same thing is true for work estimates, great when you have them nailed down from the start, but good luck if scope creep is already kicking in before you've even started.
    3. This is probably the only thing that will save your ass. If the whole team has some exposure to each part of the project, it's likely that someone's sanity check will save you days or weeks of time before a bad design decision was made (and on a lower level, coding decisions). Something that I've really noticed myself is that QA starts the first day that designs are put on the table. If a design hasn't been picked at to start with, then it's pretty much guaranteed that a developer is going to have to go back and redo a bunch of things to make a feature work the way it should.

    So yes, the article does make some good points, but they only go as far as the factors covered are under your control. Even in the best circumstances, a poor programmer or a less than perfect team lead can hamstring the whole team. In the end, I think that the only benefit that articles like these have is to make you really think about process. Process might not save you in the end, but at least going through the effort should make you a better developer.
    1. Re:Good On Paper by honkycat · · Score: 1
      when you complete the document and the very same day, someone in upper management says, "Now this is a great document for you guys" and immediately starts making large changes (true story), there's not a whole lot you can do.
      I used to work at a company that did consulting projects (we'd design hardware/software products for customers and get them through small manufacturing runs). We had one particular difficult customer who just didn't seem to understand that at some point, we had to define what it was we were building and what features it had to have to qualify as meeting spec. After a lot of back and forth early on thinking of all the great things it could do (which is fine), we finally had a meeting where we put together the design spec outline. As we closed the several hour meeting after which we were going to write the spec that would go in the contract, this guy actually really truly said, "Now, I hope you're not going to point to this and refuse a new feature later because it's not in the spec."

      Really. It was all I could do not to stand up, throw my notebook at him, shout, "That is exactly what we'll do you moron, that's why we are writing this spec!" and storm out of the room. He did go on to try to add a few features later on in the design process. We probably implemented some of them, too.
    2. Re:Good On Paper by 1iar_parad0x · · Score: 1

      If the scope, goals, or features were never clearly defined by managment, that there's a flaw in the requirements gathering process. That may not be much comfort to you now, but this really implies management error. There's only so much a programmer himself can do to fix this.

      --
      What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
    3. Re:Good On Paper by Anonymous Coward · · Score: 0

      That sounds about the same. We're developing web delivered 'consulting-ware' basically and trying to get a lot of large companies interested. To be fair, we're kind of breaking new ground, but that doesn't make up for the fact that the main drive behind our product development is sales and marketing. Instead of really pinning down one system or large feature, we end up all over the map trying to keep up with every new development in the industry (thankfully these aren't that frequent). I love sitting in meetings where we're trying to tie things down and the discussion inevitably veers off course to 2 years from now.

    4. Re:Good On Paper by Azarael · · Score: 1

      Yep, I totally aggree. It's really unfortunate what happens to your work and approach to software development though. For every single new feature that's added you automatically have to start out with your back to the wall, even if it's really worth while. You have to approach things that way because no one wants to have a dead project laid at their feet (even the article implies that this is likely). Sometimes you kind of feel like being a software developer is pretty much signing yourself up to be a punching bag at a boxing club.

    5. Re:Good On Paper by MickDownUnder · · Score: 1

      Always always always at the start of a project get feedback from clients and management as early as you possibly can. Never wait till you're at a stage where weeks of time has gone into something before giving anyone a glimpse of it. At the start of a project you need to stay small and agile. As your project grows larger you lose your agility, this is why its so important that the open slather changes occur when the project is still at the small phase.

  10. Re:Impossible schedule? No problem. by Solra+Bizna · · Score: 1
    1. Fire everyone but programmers.
    2. ???
    3. Profit!

    -:sigma.SB

    --
    WARN
    THERE IS ANOTHER SYSTEM
  11. Getting back on track by EmbeddedJanitor · · Score: 4, Insightful
    The main problem with getting late is that everyone lies. People only admit to being late when things get really bad and by then everyone is stressed.

    Step 1: Admit being late as early as you can. If people start ranting, keep cool. Tell them that ranting won't fix it. The sooner you admit to being late, the sooner you can stop screwing around and start getting the project back on track.

    Step 2: Help management prioritise what they want and what can be delivered when and what options are available. If they want a product to sell, they'll need to make some compromises.

    --
    Engineering is the art of compromise.
    1. Re:Getting back on track by Joebert · · Score: 3, Insightful

      But don't let them know too early, they might decide to go with someone who will be on time instead.

      --
      Wanna fight ? Bend over, stick your head up your ass, and fight for air.
    2. Re:Getting back on track by Nefarious+Wheel · · Score: 4, Interesting
      "So, do you want the problem solved or would you like to spend the time apportioning blame?"

      -- this little line has helped me throttle down a lot of rants over the years.

      --
      Do not mock my vision of impractical footwear
  12. Video Games Are Good For Me by Joebert · · Score: 1
    Smart Software Development on Impossible Schedules

    It's like playing Final Fantasy & casting Haste on your own team members after they've all been Doomed in an attempt to beat the clock.
    Sometimes it works, sometimes it doesn't.
    --
    Wanna fight ? Bend over, stick your head up your ass, and fight for air.
  13. Overcoming impossible schedules.. by Anonymous Coward · · Score: 0

    is an oxymoron. That said, when I'm strapped for time I just inject embryonic stem cells down the eye of my penis.

  14. Inflation doesn't make up for a bad schedule! by Anonymous Coward · · Score: 1, Funny

    "We developed a rule of taking the engineers estimates and double them. Of course we're still running a little late ;)"

    Problem is Scotty already doubled them. Now just wait till the admiral gets them.

  15. Next time will be worse by DreamerFi · · Score: 2, Insightful

    And if you do manage to produce something marginally useful in that impossible schedule, they'll give you even less time to do it next time around. After all, you managed to meet the deadline, right?

    1. Re:Next time will be worse by Brandybuck · · Score: 1

      My old company was that way. Our deadlines were given to us without consultation. Half of engineering's job was to figure out how to strip a project down to fit into the schedule. But each time we managed to do it we got a shorter schedule next time. The scheme finally blew up when we were given the ludicrous schedule (which we of course missed).

      --
      Don't blame me, I didn't vote for either of them!
  16. Re:You can explote your coders better by... by Joebert · · Score: 1

    My current team has issues communicating, so I should bring another language into the equation ?

    What are you, some kind of foreign labor spokesperson ?

    --
    Wanna fight ? Bend over, stick your head up your ass, and fight for air.
  17. Title Is An Oxymoron by Anonymous Coward · · Score: 0

    It should read "Stupid Software Development on Impossible Schedules".

  18. Just to be pedantic by Zygamorph · · Score: 1

    If its an impossible schedule then by definition it can't be done.

  19. head 'em up, turn 'em out, rawhide by grikdog · · Score: 1

    My favorite project karaoke is Rawhide. I never actually sang it on the job, but I had the joyous pleasure (after I left, throwing my mug in the drink and wishing river trolls on the morgul-minded) of watching that management style self-destruct within three months. From "my way or the highway" to chapter eleven in 90 days, wow. No, folks, rawhiding your most creative people is stupid.

    --
    ``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
    1. Re:head 'em up, turn 'em out, rawhide by Anonymous Coward · · Score: 0

      Not a deathmarch, but I was at my crappy pre-programmng tour guide job for a few 24 hour days at the museum. Do a day guiding tours, and then turn around and run the overnight camp for cubscouts. It was not a bad gig, but on day 2 of 24 hours on clock and 5 hours sleep a night I was singing Irish Rebel Tunes at full voice in the museum at midnight. Gourgeous Accoustics *VBG*

      "Come Out you black and tans, Come out and fight me like a man"
      "Show your wives how you won medals down in flanders"

      If team members are singing somewhat innaprpriate stuff on the clock they at least need sleep, if not a real break *G*

  20. Re:You can explote your coders better by... by sapgau · · Score: 2, Insightful

    Nope, just a manager who wants to cut the time it takes to build our product and save some bucks while doing it(I will probably get a big fat bonus). And nobody can tell me otherwise because I read it on my favourite business magazine that claims it's the way to go.

    /Make sure that I bail out for maintenance and future changes
    //I don't know why Crystal Reports comes to mind ;-)
    ///Everybody can understand english, you just need to speak a little louder :-D

  21. fast, cheap, well done by davidwr · · Score: 5, Insightful

    Pick two. If you are so lucky.

    A truly impossible schedule is by definition impossible to meet.

    An extremely-difficult-but-possible schedule is by definition makeable if the correct resources are applied... correctly.

    If management is giving you an impossible schedule, they are either idiots or setting you up to fail or both.

    If they are giving you a difficult schedule and refusing you the resources you need, or do not have the authority to give you those resources, see above.

    If they are giving you a difficult schedule and you haven't requested the necessary resources, then they are testing you and you've failed the test.

    --

    What do I mean by resources? I mean anything that can make the project go faster without sacrificing quality. This may mean additional manpower, the authority to say "no" to new feature requests, the authority to make feature cuts, or the reassignment or hiring of people with key skills to your project. It may also mean late-night pizza parties and family-support to the "code widows" until the project is complete. It can also mean additional or extended time off for the entire team after the project is shipped.

    --
    Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
    1. Re:fast, cheap, well done by Anonymous Coward · · Score: 0

      Or according to the manager of Lucasarts in a recent interview, pick all three. (paraphrasing) "I don't understand why other developers don't aim to deliver on time under budget high quality games like us". No details were given of his secret techniques apart from work smarter, and not revealing lucasarts revenues, profits, or anything else concrete.

  22. Re:You can explote your coders better by outsourci by Ohreally_factor · · Score: 1

    You made my head asplote.

    --
    It's not offtopic, dumbass. It's orthogonal.
  23. Next in this exciting series of articles.... by vought · · Score: 1

    How to be a consumer without ever taking out the trash...

    How to spend money without making any...

    How to eat without any food...

    How to find another job after your company's poor planning puts you on the street.

  24. 12 Rules by johnBurkey · · Score: 5, Insightful
    1) Make sure you know what you are building. Many project delays are because the "customer"- the manager, corporate head, you? doesn't actually know what they want.

    2) Make sure you only work on things that you need to ship version 1.0 of that.

    3) Make sure you keep the prototype running always.

    4) Show Demos every few days to make sure noone is confused about what is going on.

    5) Tell them they can ship it whenever they want, they write the check.

    6) In the meantime, work towards the goallline like a football player, do not circle it like a lion waiting for it to die.

    7) Don't make any project your time to show how clever, cute, or interesting you can be...

    8) Keep Teams/Egos/Methods/Files/Modules/Projects/build times small. Small is good.

    9) If someone is not clicking with the rest of the team:

    - talk to them privately

    - reassign them

    - if this person is you, read #11, and consider if you want to build this project, or do something else. Follow your heart.

    10) Do the riskiest part of the project first.

    11) Remember that the enemy of the better is the best.

    12) Don't worry about it. If you are working hard, and follow 1-11, you are doing your part.

    That's enough to chew on. As homework, go build a paper mache model of the project, complete with testers whizzing around, filing bugs that are actually feature requests.

    1. Re:12 Rules by pieterh · · Score: 2, Interesting

      Those are very good rules.

      Very good indeed. Did you collect these yourself? If so, do you want a job?

      I'll add a few more of my own rules:

        - Make sure you're in total control of your toolset and improve it systematically
        - Do not take the clients' deadlines literally - first accept the project, then renegotiate the deadline.
        - Don't implement anything that is not going to be used immediately.
        - Design your software around interfaces so you can make massive changes cheaply.
        - Document the interfaces perfectly, but don't document code (see next point).
        - Be fanatical about the readability of code.
        - Push all QC, packaging, and issue management through a single person.
        - Build regression testing into the build process.
        - When debugging a problem, never ask, "how come it works on my box?"
        - If some code is too complex to understand on a Monday morning before coffee, redesign it.
        - Never add new code while there are still bugs in the existing code.

    2. Re:12 Rules by chriswaco · · Score: 1

      > 2) Make sure you only work on things that you need to ship version 1.0 of that.

      This is one of the tricks that is hard on good software engineers. I like to write code that can be used in future projects. I like to write complete code, say a generic networking class with interthread notification rather than just a few network routines. However, on a tight schedule, there is something to be said for just writing the routines you need right now without a big overblown design.

      I often find that OOP is a problem when it comes to tight schedules and new code. It takes a long time to design class hierarchies, object interactions, and to write full, testable objects. Rearranging class hierarchies is also a time sink. Sometimes simple procedural code is faster to write and the end user won't know the difference. Just write code to do what you want, even if it's kinda ugly. Often this straight-forward design is easier to follow anyway.

      Another important thing is to let the developers write code and STOP BOTHERING THEM WITH COMPANY BS. So what if their quarterly reports are late. If they need equipment or software get it for them in a day or less. Make sure you have testers ready to test whatever they produce whenever they produce it. Have someone write their expense reports for them, bring them lunch, and let them skip unnecessary company meetings. Nothing slows down developers more than thinking that the company isn't supporting them properly.

      Most importantly, hire fast developers. Some developers are great but slow. Some developers are fast but bad. You want someone good and fast. The code won't be as pretty as it could be, but your project will get out the door at least.

      Copious amounts of free Mountain Dew helps too.

    3. Re:12 Rules by Bamafan77 · · Score: 1
      1) Make sure you know what you are building. Many project delays are because the "customer"- the manager, corporate head, you? doesn't actually know what they want.

      This is such a suprisingly big problem, that it's probably a good idea to define what "knowing what you want" means when it comes to making schedules.

      There are too many "specs" that exist solely on a handwavy level; they're full of things like "GPS Integration", "Asynchronous messaging", etc. This is one level of "knowing what you want" and it's a good starting point, but it's too high level to be making scheduling decisions.

      Until you know things at the level of what libraries are being used, how different situations will be handled, what *precise* data will be passed when and where, etc (or if you've done the *exact* same thing 10 times before), you don't know enough to be making even semi-accurate schedules about anything.

    4. Re:12 Rules by tommut · · Score: 1

      - When debugging a problem, never ask, "how come it works on my box?"

      Heh I do this all the time. :) Why do you say "never ask" this? Because it shows you don't thoroughly understand the code? I work on software with many different configurations across many different platforms, and very often it works on one person's setup but not another. I was just wondering why this bad - does it show a weakness?

      -Tom

      (Yes I realize this is weeks old, but I just came across this article as I was perusing back-stories on /.)

  25. Manpower is not fungable by davidwr · · Score: 1

    Programming isn't like building a bridge or skyscraper, where you can say "this will take x man-months" and build either a quick, expensive schedule or a long, less-expensive one.

    Someone else already mentione Brooks's Mythical Man-Month. By and large Brooks is correct. There are some opportunities to "buy time" but these only work when the people you are adding have roughly the same level of knowledge as the people who are already on the team, and even then it's dicey. For example, if you manage to get someone added to your team who worked on the last release, and have him be responsible for updating the code he's already familiar with, you can make the project go faster. Bring in someone unfamiliar with the code and your schedule will suffer while he trains up. Also, if you were planning on giving a part of the project to an as-yet-untrained group, you can bulk up that part of the team before training starts and shorten the schedule. For example, if you have a dedicated team of in-house testers who have never tested your new product before, it won't be terribly costly to double the size of that team. Of course, if you don't adjust the size of the development team to account for bugs coming in at up to twice the previously-predicted rate you might shoot yourself in the foot.

    --
    Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
  26. The EA method... by abigsmurf · · Score: 5, Funny

    Companies should follow EA's tactics. Say to the coders "you'll have an easy schedule during the majority of a project but at crunch time, you're expected to work huge hours with minimal overtime pay" You start the coders on a project nearing crunch time, have them slave away till it's finished then move them onto another project that's nearing crunch time. If no projects are nearing crunch time move ahead the schedule on one knowing full well you can't meet the new date but still force the overworked coders to give 110% to attempt to meet this impossible target. You keep all the experienced programmers doing the stress free base work and once the outline is done, you move them to start another project. The vital experienced coders stay happy and stick with the company and the dime-a-dozen average coders have all the work they could possibly give squeezed out of them for minimal pay. Gotta love an industry with few/weak unions...

    1. Re:The EA method... by cryfreedomlove · · Score: 0, Flamebait

      How would unions help this situation?

    2. Re:The EA method... by abigsmurf · · Score: 1

      continual forced unpaid overtime + extremely stressfull working conditions for some of the lowest paid programmers in IT. Unions have the power to do something known as a strike to stop workers being abused...

    3. Re:The EA method... by cryfreedomlove · · Score: 1

      Why do programmers put up with this now? Their relationship with EA is voluntary. There is a shortage of programming talent today in Silicon Valley. If things were that bad at EA then people would just bail out.

  27. double time ain't enough. by fprog · · Score: 5, Insightful

    Seriously, doubling the time is NOT enough.

    Top 12 - Rule of thumb says:

    1) Triple the estimated time + 10%.

    2) Add 2 weeks to that amount for a complete code review.

    3) Any changes by the customer means "adding 2 weeks to the schedule", even if it's one line of code... why? because, it must pass documentation, Q.A., validation and be reviewed by the entire department, without accounting for "double bug", bug induced by another bug and stuff like that or bugs that are in the core library and means retesting "everything", "every module", etc.

    4) Any changes must be approved, reviewed and means adding delay (normally a big NO-NO) and therefore, 99% of the case thoses changes are left for future phases or abandonned by the client when they realise the implication. If not, it's your objective to discourage them or force them to reconsider by any means. =P

    5) Don't give any feedback to the customer unless you must! If you do, downgrade any progress to minimum to reduce expectation and refrain the customer from adding new stuff to the TODO list.

    6) Which means, each phase must be clear, consise, humble, realistic, feasible, with lots of buffer time for fixes, reviews and testing. Exagerating how complicated it is to a customer is always a good idea, because in the end, everything that seems easy is actually very difficult.

    7) Do minimum documentation, UML to get started... They'll get rewritten at least 30 times, before everyone in the group agrees after what 40 meetings?

    8) Once the phase somehow works and the thing is somehow settle, start documenting it, so you don't forget. It's actually a very good way to detect logical mistakes, misbehaviors, bad coupling, bad cohesion, missing corner cases, bad design choices, usability problems, etc.

    9) Best teamwork is small team of 3-5 senior people working toghether hand-in-hand, sometime helped by 1-2 junior, which can do much better than 120 junior who are completely clueless and never deliver on time...

    10) For big projects split things up in component and/or phases that a small team of 3-5 people can do, keeping in mind of the big picture so its scales up, but ignoring any meaningless future details that don't matter "right now".

    11) Rush the people to do it in "the simple 1/2 time delay", keeping in pocket the "double time" remaining for any arising issue and reworking the core libraries, overhaulin the code, reviews, fixing bugs, etc. This means that if you are really late, you are actually late on your "buffer time". If things goes well, then the project will be done before it's expected, which will impress any client.

    12) Finally, but not the least, there's no such thing as a bug, it's just a "small improvement", a "new feature", "code overhaulin", "mispelled requirement" or a "security enhancement". It keeps customer smiling, it's less depressing for everyone and overall keeps the mood up on everyone face with a laugh or two! ;-)
    Furthermore, no ones want to hear that the code is "full of bug", but saying that a group of people are always "enhancing, overhauling and improving the code base" also means bigger bonus! =)

    Hope it saves you from any future project delay or cost overrun!

    1. Re:double time ain't enough. by anomalous+cohort · · Score: 1

      The question isn't how long does it take to do feature X? but rather what part of feature X can go into the next build? After the users see it, they're going to want to change it anyway. It's not poor estimates that make a project late, it is the inevitable score creep that happens when users see what they asked for in action only realize that it isn't what they really need. This approach is what agile development is all about. They call it time boxing.

      It doesn't answer the all important business question when will it be ready? Instead of trying to answer that, find out when they really need it. Not when they want it because they want it now. Not when they tell you they really need it because that answer is going to be part of the same negotiation game (you know, double the estimate, half the deadline) that other posters are playing in their advise in this forum. Find out the external driver that this new feature or product is tied to and take a good guess at calendar dates tied to watershed events in that driver. We will call that the delivery date. Once you arrive and get achieve buy in for a real delivery date with the decision makers...

      • Estimate how long it will take to fix all bugs in the system once the feature set is frozen.
      • Use that estimate to back out a feature set freeze date from the delivery date.
      • Publish this schedule so that everyone understands it and agrees to abide by it.
      • Identify the key users whose opinions the decision makers trust.
      • Do a weekly build and make sure that these key users get to play with it every week.
      • When the feature set freeze date occurs, accept no more scope changes.
      • They will try to sneak scope changes into the bug list so you will have to inspect carefully and be prepared to reject those bugs.
      • There will be massive amounts of escalation. He who blinks first looses.
      • Make a lot of election year promises about how their important feature will get into next year's release.
      • Take the team out for dinner when you deliver on time.

      Will everyone like it? No, your job is not to please everyone. Will you have formed some enemies from this? You bet you will. I would rather be hated on a successful project then loved on a failure. Some of you might say it won't be a success if it doesn't solve the user's pain points even if it is delivered on time. To that I say, if they can't figure out what they need for it to do in six months, then they will never be able to figure out what they need for it to do.

    2. Re:double time ain't enough. by angel'o'sphere · · Score: 1

      Sorry, but you should either be modded funny or troll.

      1) So you allways tripple your estimate and add 10%? So by simply assuming 3 times the efford your next project would do a better estimate, no? Why do you again make a stupid estimate and just tripple it then?

      2) 2 Weeks for a compelte code review? For how much development time? For X days development, you need at least x/3 days for review. Reviews only make sense if they fix something. If you do amke reviews, why not on the design and requirements as well?

      3) What about having a test suit and doing regression tests?

      4) interesting tactics ...

      5) interesting tactics, and your customers indeed come back to you? If you extend this "schema" to far it is very close to crminal felony.

      6) BUFFER TIME? Where does that come from? Is it included in your X * 3 + 10% estimate increase? Fixes? Fixes of what? You plan to deliever buggy code? O! O! So you don't have a test case for a fnished feature?

      7) For whom do you document? For the customer or for you self? In the first case he pays you to do so! In teh second case he pays you for the time you waste if you have to figure old stuff again and again .. instead of looking them up in the docs. both approaches seem clueless to me.

      8) Sorry, I either prefer to document first and code then (aka making a design and an architectue) or I generate the documentation from annotations.

      9) the only statement that makes sense.

      10) makes sense somewhat, but how to do that if you dont do UML/architecture/design first, or at least a little bit?

      11) same like your point 1) and 6) Either you can manage your time and deliver good work or not. Multiplying by 3, adding 10% adding 2 weeks, working with buffers and then only commiting your ppl to do 50% (because you need the rest for fixes etc.) that means we are meanwhile by a 10 fold factor of the "original estimate", working like this is complete bullshit.

      12) The base of successfull business is honesty to your customer. And the base to run your development is to be honest to your self. The need to add buffers, increase estimates, only schedule 50% of the worktime to have "space" for the unexpected .... If you would be honest to yourself you would realize: I can't develop software.

      Sorry, but you better should do public relations work or something ... I hope you where only kidding in your 12 points and the guys modding you where morons ;D

      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    3. Re:double time ain't enough. by angel'o'sphere · · Score: 1

      oops, did not mean felony but fraud ;D

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
  28. That's funny, but... by chaboud · · Score: 3, Insightful
    Reading slashdot during build-times is the only reason that I'm still here at 1am, working on an app in crunch time.

    I think that the most important thing to do when a project is on an insane schedule is realize that you aren't super-human and pace yourself. If you don't, and crunch hard nights or extra-long 50-hour sessions, you'll spend the next few days with a fried brain and a complete inability to make use of your time.

    If you're normally a 9-5 guy, pull 10 hour days. If you're normally longer, possibly consider working longer, but notice when you've started lagging because of fatigue.

    Other things:
    • Take walks. Get out, get blood flowing, and rest your eyes. Don't stop to talk to people on your walks, because you'll smoke hours talking about nothing (like postings on slashdot).
    • If you're angry, or burned out, take a day. You can spend entire weeks in a funk if you can't get yourself out of it. It doesn't help you, and it doesn't help your team. If your boss can't make sense of needing to pull away so you can be more effective, try and find another job.
    • Be reasonable about moving targets. There's no benefit to throwing a fit when your boss changes dates/requirements on you, but let him/her know what it's going to cost in time or other features. Be quick about this. Don't stew about it and let the feature-spec gel before you're quick to pull the "we have to cut..." card.
    • Big design up front: Don't do something three times because you weren't sure how you were going to do it in the first place.
    • Less design up front: Don't overdesign something because you're so hung up on not doing it twice. You might have to code it twice, or three times. Get dirty in the code long before you've started sweating details that don't matter. If you're solid, this stuff will just flow out naturally.
    • Learn to use copy and paste, along with other tricks to save yourself grunt-work time. It amazes me to no end how much time I see some programmers spend on writing code. On the same note, learn to type quickly. I've known some great programmers who were hunt-and-peck two-finger typists, and those are the same ones who generally pulled super all-nighters typing at 20 wpm.


    And my build is done...
    1. Re:That's funny, but... by StrawberryFrog · · Score: 5, Insightful

      Learn to use copy and paste

      Nooo!

      I wish I could beat with a crowbar all the cut-and-paste programmers who make my life difficult - I have to maintain the piles of repetitive crap code that they produced - they knew how to use Ctrl-C and Ctrl-V but could not or did not bother to do the most basic of programming taske: eliminate repetition by factoring code into meaningfully-named, paramterised procedures. This was best practice in 1970 already but so many people still don't get it.

      --

      My Karma: ran over your Dogma
      StrawberryFrog

    2. Re:That's funny, but... by BenjyD · · Score: 1

      I know the feeling: I had to fix up some code recently with around 120 similar functions, each of which started with the same ten lines of code with one number changed. I'd have thought that by the ten or twentieth time of Ctrl-C Ctrl-V, the coder would have stopped and thought about it, but apparently not.

    3. Re:That's funny, but... by Anonymous Coward · · Score: 1, Interesting

      I wish I could beat with a crowbar all the cut-and-paste programmers who make my life difficult - I have to maintain the piles of repetitive crap code that they produced

      Zark's singing fish, yes.

      Even more annoying, though, is trying to fix a C&P programmer's mess and then being told to - and I quote - "just copy and paste, we don't have time to over-engineer it," not by management, but by the lead developer.

      I am a rebel, a guerilla programmer, fighting to change the company from the inside...

      Next task: getting them to accept that version control is a good idea.

    4. Re:That's funny, but... by Anonymous Coward · · Score: 0
      Learn to use copy and paste, along with other tricks to save yourself grunt-work time.


      IMHO, copy-and-paste should be banned to developers: if you are repeating the same code over and over again, then you should rethink your dessign.
    5. Re:That's funny, but... by KlausBreuer · · Score: 1

      Good points!

      I'd like to add another one: fitness training.

      Don't stare at me like that. Of course even you can do it, it's just a question of starting small, and working your way up.
      Trust me, when you've just sweated fifteen gallons (or at least it feels like it), really finished yourself, and took a long hot shower afterwards, you feel completely new and relaxed. Especially if you finished the shower with an ice-cold minute :)

      Have a look at, for example, http://www.bodyforlife.com/ - they have a pretty good system.

      PS: Yes, we have a fitness studio across the street from my office. Very useful! :)

      --
      Free PC version of ChipWits at http://www.breueronline.de/klaus/chipwits/
    6. Re:That's funny, but... by Communomancer · · Score: 1

      My favorite experience with this was when I was working right around Christmas of 2000. I'd been brought in on the project late in the game to help "relieve" one of the programmers who wasn't exactly working out. One day I had to fix a bug in his "Frequently Asked Questions" section of the website. There was an A-Z menu at the top of the screen that was acting finicky and I got to fix it.

      Luckily for me, this programmer _had_ factored his menu code into functions. 26 of them, in fact!

      --
      "UNIX" is never having to say you're sorry.
    7. Re:That's funny, but... by Rob+the+Bold · · Score: 1
      Learn to use copy and paste

      Nooo!

      I wish I could beat with a crowbar all the cut-and-paste programmers who make my life difficult - I have to maintain the piles of repetitive crap code that they produced - they knew how to use Ctrl-C and Ctrl-V but could not or did not bother to do the most basic of programming taske: eliminate repetition by factoring code into meaningfully-named, paramterised procedures. This was best practice in 1970 already but so many people still don't get it.

      All you gotta do is just put a unique identifier into each cuttenpaste, like e.g. "CP1654". Then, when you find a bug in one block, you just search the source code for "CP1654", and paste the fix in at each location. Couldn't be simpler. Imagine the time you save by being able to quickly find the locations of your cloned bugs! Piece of cake, a real "no-brainer", even a small retarded child could do it!

      The only real problem comes in if each block is a slight variarion on the previous one. They all do the same thing, but in a slightly different way. Boring you might think, to go through all of that -- but no, it's the variety that makes it fun. Think Kama Sutra.

      --
      I am not a crackpot.
    8. Re:That's funny, but... by DimGeo · · Score: 1

      He meant using CTRL+Shift+Arrows to select a function call or a class name, and using CTRL-X or CTRL-C with CTRL-V to make writing the code faster. Suppose you have to build a grammar in Yacc. You generally use copy&paste to build up a number of 10-20-40-80-160 empty rules, fill in the blanks by typing, then remove the extra entries.

    9. Re:That's funny, but... by mrjb · · Score: 1

      Next task: getting them to accept that version control is a good idea. Dude. You're obviously working at the wrong company.

      --
      Visit http://ringbreak.dnd.utwente.nl/~mrjb/growingbettersoftware to download your free copy of the book
    10. Re:That's funny, but... by StrawberryFrog · · Score: 1

      Learn to use your tools, sure. There are some very nice IDEs and with code completion and refactoring (and addin tools) out these says that make cut-and-paste just the tip of the code-writing iceberg. Key skills for a programmer are to Learn how to use copy and paste, and the rest of the IDE's shortcuts and to Learn when not to use copy and paste

      --

      My Karma: ran over your Dogma
      StrawberryFrog

    11. Re:That's funny, but... by Rocky · · Score: 1

      > Big design up front: Don't do something three times because you weren't sure how you were going to do it in the first place.

      Actually, doing it two times (for small systems and sub-systems) can be extemely beneficial in making good, re-useable code.

      Write it once and make your mistakes/figure it out. One of the products of this can be your unit test. Throw it away - it sucks anyway.

      Write it the next time and get it correct.

      Just a thought...

      --
      "I'm an old-fashioned type of guy. I worship the Sun and Moon as gods. And fear them."
    12. Re:That's funny, but... by DimGeo · · Score: 1

      Exactly. In a good IDE there is little use for copy & paste, except for editing non-supported files, like text files with custom scripts, etc.

    13. Re:That's funny, but... by dubl-u · · Score: 1

      I wish I could beat with a crowbar all the cut-and-paste programmers who make my life difficult

      A-fucking-men. Copy-paste programming is using a human to do something that machines are a million times better at doing. It may make coding a little easier, but it makes maintenance much harder. Maintenance cost scales by lines of code, so factoring out the duplication saves big bucks down the road. And generally, not even far down the road.

  29. prioritize and make small releases by Anonymous Coward · · Score: 0

    When you're in a situation like that you need to prioritize the most critical features and release them immediately.

  30. Re:You can explote your coders better by... by Joebert · · Score: 1

    That wouldn't happen to be a sales manager for a foriegn staffing firm would it ?

    --
    Wanna fight ? Bend over, stick your head up your ass, and fight for air.
  31. Drag and drop by Anonymous Coward · · Score: 2, Funny
    How about drag and drop components to speed things up? Just drag the boss to the window and drop him. Make sure you compose and print a suicide note with his computer and printer first though. Then while they try to sort things out and hire a new boss just continue to work on the project and spruce up your resume.

    How's that version of "Quick-Kill Project Management"?

    Slashdot's bot checker a mind reader?
    please type the word in this image: motive
    1. Re:Drag and drop by Kamineko · · Score: 1

      I misread that as 'Drug and Drop', which also works.

  32. Human Resources Stunt by Anonymous Coward · · Score: 0

    How many of us have been under the fire of those impossible schedule? These last years have been coupled with "due yesterday projects" requests. It must be some human resources way to have results against lazyness and such.

  33. too idealistic: it's the same old sw management by Uksi · · Score: 2, Insightful

    I haven't the experience that some of the engineers hanging around here have, so please take what I say with a grain of salt.

    However, the article appears to be far too idealistic.

    1) The only good schedule is a realistic schedule. If the schedule is intentionally compressed, it's a bad schedule. The only way to compress your schedule is to cut work (e.g. features).

    1.5) Working under the "hurry hurry hurry" "boss wants it yesterday" environment means your engineers will cut corners everywhere. When faced with a choice to copy/paste a function in 15 minutes vs. taking some time to refactor and reuse the code in 1 hour, engineers will choose the earlier. In my experience, design debt then accumulates really fast.

    2) Code reviews as suggested in the article are a drag (2.5 hours at a time?!). In my experience, they rarely get anything useful done: it's usually too late to make medium or major changes and under the gun (see 1.5) engineers will scoff at "wasting time" with minor changes. From what I've seen, the code reviews serve mostly as a cover-your-ass mechanism for management.

    Code reviews need to be short (30-45mins) and happen as soon as possible, while the original engineer has all of the reasoning and decisions in his head. Hot-on-the-heels code-reviews of bug fixes and feature check-ins (especially useful for bug fixes).

    Perhaps the code reviews need to happen as the code is written (sometimes I ask my coworkers to show me their draft solutions). That's almost pair programming though. Unfortunately, that's not practiced at my job, and so I have no expereince with pair programming.

    3) Estimates. What the article described seemed to be a basic process for doing the SWAGs and the engineering time estimates that we all "know and love." I fail to see the novelty in the proposed approach: it seems to be run of the mill waterfall stuff.

    It's so easy to say "break down estimates into small tasks, so you can estimate well." However, I found it very difficult to do so effectively. Pardon the Rumsfeld flavor, but often we just don't know what we don't know: stumbling blocks occur, requirements drift or get "clarified", surprises abound. Pressuring developers to provide task breakdowns and estimates past their knowledge point can create a false sense of security (i.e. misleading task estimates). I've seen many such a small task breakdown become trash as the project progressed.

    Often, to get a better idea of the remaining work and tasks, prototype work is required or some progress on key features.

    I have no good answer for this problem, but my feeling is that it lies somewhere in the realm of being able to react quickly to change and reevaluate the project's progress. This is where things like smaller tasks and more frequent completion points of features seem to help. At that point, changing direction is easier because you have fewer concurrent unfinished tasks.

    This is where the smaller tasks and frequent iterations of the XP fame seem to be a benefit. Unfortunately, many managers can't take the thought of not having a detailed per-small-task project plan in their MS Project window. So, in my unfortunate experience, such managers attempt XP-style iterations, but then quickly regress into more traditional long-term milestones. I've seen it happen time and again.

    1. Re:too idealistic: it's the same old sw management by Lonewolf666 · · Score: 1

      1.5) Working under the "hurry hurry hurry" "boss wants it yesterday" environment means your engineers will cut corners everywhere. When faced with a choice to copy/paste a function in 15 minutes vs. taking some time to refactor and reuse the code in 1 hour, engineers will choose the earlier. In my experience, design debt then accumulates really fast.

      A very good observation. Because the 15 minute quickhack can help you to meet your deadline this time. So the engineers will do it the quick way, but somehow the time to re-do it properly is never there.
      Two or three versions later, you will have to do more changes to the same area of the project. At this point, the lousy design comes around to bite you in the ass.

      --
      C - the footgun of programming languages
    2. Re:too idealistic: it's the same old sw management by Uksi · · Score: 1

      "the lousy design comes around to bite you in the ass"... the technical term is "design debt" ;)

  34. Web-u-like by Tinz · · Score: 2, Interesting

    I was asked to create a fully dynamic, CMS backed website in 3.5 days, using ASP.Net just the other day. This was because the Marketing department had forgotten to involve me in the launch of their new spin. I managed it by working long hours, robbing code from other projects and working at a furious pace. There was no time to plan, I just had to spill out ideas on the fly. Sound familiar?

    I went on vacation, returned after 3 weeks and nobody had used the CMS to populate the site with data and graphics. In fact, the Marketing department complained that I had not given them more time to decide what they wanted. I was blamed for holding the project up.

    A lot of people out there think that coding is very simple, a bit like waving a magic wand. Oh ... and the amount of times I have been told, "it's just a few buttons, surely you can manage that!"

    Now where's my wand gone?

    1. Re:Web-u-like by Lehk228 · · Score: 1

      if they ask for buttons give them buttons

      "oh, you wanted the buttons to DO something????? that takes longer

      --
      Snowden and Manning are heroes.
    2. Re:Web-u-like by Anonymous Coward · · Score: 0

      Do some research on {clothing,keyboard} button manufacturing (I'm talking about buttons made out of real material, like plastic, or whatever) and present it to your marketing department. And then ask them why they think GUI button manufacturing should take a lot less than that. Now listen to what they are saying - they're probably misinformed - and tell them about GUI button manufacturing. Be polite, these people aren't programmers. They're marketing people.

      Just a suggestion.

      - chris_eineke

  35. Re:You can explote your coders better by... by Duhavid · · Score: 1

    Sarcasm, Joebert. Joebert, Sarcasm.

    --
    emt 377 emt 4
  36. Re:You can explote your coders better by outsourci by Duhavid · · Score: 1

    So that the oursourced-to crew can say
    " we love deadlines, the whooshing
        sound as they go by, priceless ".

    Or something like that.

    --
    emt 377 emt 4
  37. Re:You can explote your coders better by... by Joebert · · Score: 1

    Oh me & sarcasam have met, it just seems that every time we do, they've undergone plastic surgery & I don't recognise them at first.

    --
    Wanna fight ? Bend over, stick your head up your ass, and fight for air.
  38. Re:You can explote your coders better by... by Duhavid · · Score: 1

    :-)

    There is a hidden flag you can test for.

    --
    emt 377 emt 4
  39. Release early, release often by mcrbids · · Score: 4, Interesting

    I can't stress this one enough!

    As architect of a small software company, the most frustrating aspect of designing software is the knowledge and understanding that there's no way to know how to do it right until you deliver something that's wrong. People almost never seem to know what they need, but they do know that whatever they have isn't it, and they'll tell you why.

    So, we have a very different tack, similar to Agile Programming. When we implement a new feature or functionality tidbit, we release very early - pretty much as soon as it more or less works without major errors, - with as much fanfare as we can manage on the cheap, and then wait for the feedback.

    We're very up front about it, and openly welcome the feedback and ideas. This takes any conflict out of the relationship and turns it into a sort of partnership. Customers love being listened to, and feedback we get, in droves. When a customer sees THEIR idea implemented a week or two after they suggest it, even when it's something stupid-simple (such as having a particular button selected by default to avoid a common mouse-click) then they're your advocate for life!

    It's that continuous, iterative cycle that's resulted in our young, 3-year-old codebase having eye-popping features, and remarkable stability. The software updates itself at the client's discretion, so nobody seems to mind much. They update as often as they like.

    With this model, there is no due date. It takes me about 15 minutes to issue a release of our software. The idea of a "release" means almost nothing - we've done more than one in a day! (we've released 46 official releases in the past year alone, with too many "unofficial" releases to count)

    Faced with this "impossible" situation, (I've lived "impossible" schedules for years now) I'd step UP the release cycle and start pre-annuoncing alphas/betas of the product the instant that something that appears demonstrable compiles and can be stuck on a dev server someplace. Invite comments and download. Call people to ask about feature X or Y. Let them know it's really early, and make sure that they have a place to bitch about the problems they find.

    When you do, you'll be surprised how much of what you thought was required was, in fact, completely un-necessary - or at least could be put off until next March for a future release. But, you'll find some simple, straightforward ABSOLUTELY GOTTA HAVE that takes a man-month to code that the users would sacrifice their firstborn to have.

    Agile software methods will find this "gotta have" pretty quickly. The waterfall model of software development would take a decade.

    You decide.

    This model won't work for all products and/or markets. And it's very important not to take away functionality that the customer previously had, or they get the feeling that you're taking something away, and that's bad. But for us, it's been very, very successful, and the relationship we have with our clientelle is very friendly, close and intimate.

    PS: Maybe it helps that we're an ASP.

    --
    I have no problem with your religion until you decide it's reason to deprive others of the truth.
    1. Re:Release early, release often by 1iar_parad0x · · Score: 1

      If your having problems with elicting requirements you should really look at prototyping, even with paper or storyboards. Secondly, I hope as an ASP you aren't customizing your code for clients. I've seen that fail too much. Third, agile (iterative) methodologies require an understanding of the problem domain. As an ASP you have this. Also, agile methodologies require a concrete understanding of most (if not all) of the tools involved. I say this because you having to connect these iterations under the umbrella of a piece of software on the fly. Lastly, it requires a truly cohesive team with proper methodological discipline. You've got to have programmers who are conversant in the process and understand how to design code (even if it's just a module and even if they aren't the ones who design it). In short, I could see a truly iterative process work for an ASP, but in many situations the above criteria aren't feasible, thus making agile methodologies more of a risk than a boon.

      --
      What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
    2. Re:Release early, release often by SloppyElvis · · Score: 2, Interesting

      This model won't work for all products and/or markets.
      Glad you pointed that out. We code medical devices that cannot fail. Sending alpha or beta code to customers without a written agreement wouldn't be such a good idea.

  40. Rapid Development: Taming Wild Software Schedules by frankie_guasch · · Score: 3, Informative
    This books explains about this in depth and it's worth every cent :

    Rapid Development: Taming Wild Software Schedules
    by Steve C. McConnell

    I'm in no way related to it, I just own it and I think every project director should have one. It contains a lot of ideas and hands-on tips you can immediately try on the field. The last section, named Best Practise, is a practical reference guide. There is also a chapter if you already are in a crazy project and want to rescue it.

  41. Quick-Kill Project Management by wysiwia · · Score: 2, Insightful

    [Sarcasm on]
    1. Quick kill the managers who set the impossible schedules
    2. Quick kill the developers who can't stay within a reasonable schedule
    [Sarcasm off]

    It's impossible to change the development time outside of the -10%/+10% margins. If your schedule is wrong you either have incompetent managers, incompetent developers or both. What ever you do, work overtime, drop in more developers or else, all you gain is a few percents.

    Development time is IMO a rather static variable, the only thing which can improve this time is education. Yet education has to be done in advance before the project is even started. During the project there's no time for education while the knowledge should be available right from the start. The easiest solution is to always plan for a 25 - 30% education phase at the beginning of your project.

    O. Wyss

    --
    See http://wyoguide.sf.net/papers/Cross-platform.html
    1. Re:Quick-Kill Project Management by 1iar_parad0x · · Score: 1

      [Sarcasm on]
      3. Kill the business owners with poor business plans and unrealistic expectations.
      [Sarcasm off]

      --
      What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
    2. Re:Quick-Kill Project Management by gatesvp · · Score: 1

      OK, development time is definitely not static. Project preparation can drastically reduce dev time. Poor project planning and shifting requirements can easily double or triple dev time.

      Each hour spent programming & each line of code has a certain % chance of causing a bug. More lines of code, more hours banging out code means that we have more bugs. We want to reduce bugs, so we want to reduce lines of code and reduce time spent programming.

      When I spend two hours refining a Document or Design. I am doing so with the goal of actually removing future bugs. When I spend two hours testing, I am doing so with the goal of locating (& reducing) existing bugs. So time spent "not coding" is actually time spent reducing bugs in the system.

      So if more coding = more bugs and more documenting = less bugs, then it seems pretty clear, that spending less time coding will reduce bugs.

      The goal is to spend very little time actually programming as more time programming basically means more time generating bugs.

  42. Re:Impossible schedule? No problem. by hackwrench · · Score: 1

    Join a pre-existing open source development group?

  43. The same lessons... by hackwrench · · Score: 2, Insightful

    What's so irritating is that the previous generation pretends that they've known the lessons all their life and takes them for granted, begs the question as to the right way, and any other similar sins of... what sort of sins are these anyways?

    Oh, and none of them come up with a cure to the problem, but insist that doing it their way is the cure.

  44. Just say no (and more) by janolder · · Score: 5, Insightful
    I've been in the business for over 20 years, as a developer, as an architect, as a team lead and as a manager.

    From architect on up, one of your key job responsibilities is to push back on features, schedules and so on, and to set expectations right from the get-go. Early on, I used to laugh out loud when being told proposed dates by marketing. That didn't go over too well, of course, so I've adopted a more diplomatic way of saying 'no' since. :-)

    The gist of it is that many executives believe in Spanish management (very well explained in Peopleware). This boils down to setting ridiculous schedules, asking for continuous overtime, etc. The idea being that every minute an engineer spends more will get the product out the door faster. Of course, this is not the case as Peopleware will tell you in great detail. It is also matched by my own experience.

    However, if you push back with data in hand (such as a detailed sizing) and a constructive proposal what to do differently, you may very well end up with a more reasonable schedule, a good product and happiness all around.

    A few more gems in Peopleware:

    • Schedules are counterproductive. Teams that don't have schedules ouperform those that do by up to 50%.
    • Overtime is only productive for one week.
    • Cubicles are sinkholes of effectiveness. Why do Microsoft and IBM only have offices for engineers?
    Peopleware is rather sobering. Every other page you think "wait - we're doing exactly what is being described here." The good news is that you can do something about it once you can recognize the signs.

    For those of you with a humorous bent, I highly recommend checking out Joel Spolsky's articles on project management. A few highlights:

    As far as the TFA goes, once you've accepted an impossible schedule you're already hosed. If you can't push back, leave. The job market is good right now.

    If you can get to a reasonable schedule (by way of reducing features, adding time or people), the TFA is a bit limited in its scope. I have a few recommendations that have worked for me in the past (your mileage will vary, and you should read Peopleware anyway):

    • You need to have the spec in writing.
    • You need to use source control, even as a single developer.
    • You need to have a single button build.
    • When the build breaks you roll back the change that broke it or you stop everything until it is fixed.
    • You need to build daily. Or better yet, continuously.
    • Unit tests are your friend. They're less useful on GUIs but for logic they're a godsend. Personally, I can crank out high quality code about twice as fast with unit tests (if you consider debug time). Reduced maintenance and improved sleep is a bonus.
    • In the same vein - automated system testing (if possible) is a wonderful way to improve shipped quality. Your testers (if you have any) cannot test everything.
    • Code reviews are great. We use code reviewer with great impact on code quality.
    • Hire the best people only and fire those you have no hope of redeeming. It may sound harsh, but allowing an ineffective developer to remain on a team is a great way to kill both the team and the project.
    • You must have a bug tracking system.
    1. Re:Just say no (and more) by Rob+the+Bold · · Score: 1
      • You need to have the spec in writing.
      • You need to use source control, even as a single developer.
      • You need to have a single button build.
      • When the build breaks you roll back the change that broke it or you stop everything until it is fixed.
      • You need to build daily. Or better yet, continuously.
      • Unit tests are your friend. They're less useful on GUIs but for logic they're a godsend. Personally, I can crank out high quality code about twice as fast with unit tests (if you consider debug time). Reduced maintenance and improved sleep is a bonus.
      • In the same vein - automated system testing (if possible) is a wonderful way to improve shipped quality. Your testers (if you have any) cannot test everything.
      • Code reviews are great. We use code reviewer with great impact on code quality.
      • Hire the best people only and fire those you have no hope of redeeming. It may sound harsh, but allowing an ineffective developer to remain on a team is a great way to kill both the team and the project.
      • You must have a bug tracking system.

      If you're stuck in a deathmarch, you might just want to take this checklist along to your next job interview. Make sure you can ask these of your potential manager and potential team. See if they both into these enthusiastically. If you can't talk to them, assume the answer is "no".

      --
      I am not a crackpot.
    2. Re:Just say no (and more) by Apotsy · · Score: 1
      I agree with everything you said, however this jumped out at me:

      Your testers (if you have any)
      That "if" shouldn't really exist. Projects without official testers still end up having testers, except they end up being the customers. This is bad. A good tester can be hard to find, but once you get your hands on one, keep them happy and get them to help you hire more like them.
    3. Re:Just say no (and more) by janolder · · Score: 1

      Good point. When I wrote that sentence I was thinking of the choice between formal testers vs. developers doing the testing. It didn't occur to me that somebody might consider shipping code without testing.

  45. Not chunks of functions... by chaboud · · Score: 1

    Learning to use copy/paste doesn't mean "use copy and paste for everything you do." Don't confuse the two.

    Copy and paste come in handy when you're refactoring a function call, building a table of similarly named elements, or propogating a new flag/variable. It can be a serious time-saver. Ctrl+Shift+(left or right) to select, Ctrl+V, or double-click, Ctrl+V.

    I'm not saying that copying huge chunks of code is a good idea. That ends up costing you more time. I'm saying that typing things out fully when you could use copy/paste can be a time saver. It's also worth mentioning that learning little shortcuts in your environment may not save you time overall, but it can make you faster when you need it. Spend slow times getting to know your workspace.

    Yes... I'm still at work.

    One last note would be that, when it comes down to it and you just have to kill yourself to get something out the door, you shouldn't expect any huge pats on the back for it. If you grind hard, you generally won't be the last guy holding up the show. Do this for a few revisions, and people will come to think of you as a closer. I don't know if this really helps in any way. I think it generally just means that you get more work to do...

    Back to the grind...

    1. Re:Not chunks of functions... by Anonymous+Brave+Guy · · Score: 1

      I'm honestly not having a dig at you personally here, but I never understand the attitude exemplified by your post:

      One last note would be that, when it comes down to it and you just have to kill yourself to get something out the door, you shouldn't expect any huge pats on the back for it. If you grind hard, you generally won't be the last guy holding up the show. Do this for a few revisions, and people will come to think of you as a closer. I don't know if this really helps in any way. I think it generally just means that you get more work to do...

      Why would you ever "kill yourself" (I know what you meant) to get something out the door? Unless perhaps you're talking about something that is safety-critical, where having your code sooner (even if it's not perfect) may literally save lives, I can't imagine the motivation.

      As you say, if you grind harder, unethical employers will just give you more work to do. Heroes are short-term assets for a bad business: you can take advantage of their generosity, burn them out, and then just dump them and get a new one. Being a hero is rarely a personal benefit, because the kind of company that takes advantage of it rarely rewards it, while the kind of company that appreciates good work usually understands the need not to overwork its staff (and, not coincidentally, rarely needs deathmarches and heroes, because their timescales and management generally don't get into that sort of mess in the first place).

      If you have the kind of work ethic that allows you to pull all-nighters or whatever, and you're a good enough developer to produce useful code even under those conditions, then why not move to a better employer? They won't expect you to work absurd hours, and will value the quality of code you produce anyway. Your life will be better for it, and you'll be supporting a good employer rather than propping up a lousy one.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  46. Use a tool by Anonymous Coward · · Score: 0

    Use a project management tool that does most of the work for you like xProcess from http://www.ivis.com/

  47. Re:Rapid Development: Taming Wild Software Schedul by 1iar_parad0x · · Score: 1

    Yeah, Steve McConnell's book should be required reading for every project manager in IT. Of course, once they've read the book, they'll probably think they know as much as him, but that's another story.

    --
    What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
  48. Simple answer. by Lumpy · · Score: 1

    Dont make the deadline.

    Cripes you guys, pulling miriacles out of your asses every day means that management expects it.

    Then sales starts selling your team as "getting it done in 1/4 the time. and then youare royally hosed with the worst job ever.

    --
    Do not look at laser with remaining good eye.
  49. it's really a 1 step process by 192939495969798999 · · Score: 3, Interesting

    1. Stop agreeing to customer deadlines before asking the engineers how long it's going to take/if it's possible.

    I've had many, many instances where someone asked me how long something would take, and I told them that there's really no good way to do what they're talking about so at least a month or two. It was only after this that I was told that they had already agreed to 2-3 weeks, so I'd better "figure out a way". But what if there is no way? It's not like 9 women can have a baby in 1 month, you know.

    --
    stuff |
  50. A new word for managers' vocabulary by hey! · · Score: 4, Insightful

    Sustainability.

    I've taken development teams down into the Valley of Death and out the other side. It can be done. But there are consequences, and you're kidding yourself if you think you can avoid them.

    The first consequences is that you can only do this once. If you're smart, you hire smart people. They know when you are ordering them to jump into a pile of shit. And if you're smart, you hire craftsmen, and craftsmen have pride. They resent being told to do that. What that means is that if the second time you try it, you end up losing all the people who can find a job easily -- in other words your most valuable employees.

    Another word that should be in managers' vocabularies is investment. Developers create assets that produce future revenue and expenses. You want programmers working as hard as they possibly can, but not simply to get the job done. To get the job done right, which means producing something that generatesw more revenue and less expense. When you focus on just getting the job done, you end up with something that barely breaks even. That's the minimal criteria for "not failing", not the maximum possible success.

    That's why I hate questions that start with "How hard would it be..." because they focus on the present, not the future. It should be "I think we can make X dollars a year; how much would it cost to support this feature, and would the amortized development costs be justified by the net revenue given the other things we could put our efforts into?" It's not as pithy as "How hard would it be...", but it covers the things managers should think about: the future impacts on revenues and expenses, the opportunity costs of the road not taken.

    --
    Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
    1. Re:A new word for managers' vocabulary by mutterc · · Score: 2, Interesting
      Sustainability.

      I don't think this is possible given U.S. corporate practices or the market for software. My day job talked about trying to shoot for long-term success, but of course they're still fighting short-term fires (layoff when a customer has a bad quarter, stage releases to get something barely working out the door, keep cutting test time, etc.) Don't know whether they were really going to do it and failed, or whether they were just telling the engineers what they wanted to hear.

      Since neither your company or your customers can think long-term, your company will just lose all of its business if it tries to do things right. Of course, there may be customers out there that both demand quality software and are willing to pay more and/or wait for it. I'd love to see some examples.

    2. Re:A new word for managers' vocabulary by hey! · · Score: 1

      I don't think this is possible given U.S. corporate practices or the market for software.

      The thing is, the day of reckoning comes. And when that day comes, there will be much wailing and gnashing of teeth and searching for a scapegoat. Which will be you. And pointing out that you were against the whole thing singles you out as not a team player. In fact you probably sabotaged the whole effort.

      The article is fine in theory. But while in theory theory and practice are the same, in practice they're different. It represents attempting to do the best you can under circumstances you shouldn't put yourself in. The problem is that you may not have the autonomy, probably don't have the autonomy, to focus on getting the most important business objectives done. It isn't just promising the moon -- that's not too bad. It's promising everything in the kitchen sink, inexpensive and fast. Something has to give, and that is quality. A rule of thumb I use is that getting something to work is 50% of the effort of making it good. You can code review all you want; even in these cases you ought to. But you still don't have the time to make it good.

      Of course, there may be customers out there that both demand quality software and are willing to pay more and/or wait for it.

      The problem is that they end up paying more and waiting longer for something that isn't as good. There's a rule of thumb in life that sometimes is stated: "the rich get richer and the poor get poorer". If your development practices create value, then soon that value starts to compound. If they create liabilities, then those liabilities start to compound.

      In the cost/quality/time trade off, there are two aspects to "quality". The first is how much you do; the second aspect is how well you do it. You should never compromise on how well you do things.

      --
      Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
  51. No such thing as a quick fix by s31523 · · Score: 2, Informative

    I have seen great projects, OK projects, and the-worst-projects-ever-created. This article points out some good tips, but there is no such thing as a free lunch. The best thing you can hope for when faced with an impossible schedule is to communicate with management, and not just with bitching about how they setup an impossible schedule, but offer solutions that are logical, like reducing scope, throwing more money at it, slipping schedule, reducing quality, or yes even canceling the project!
    Want some good (aka REAL) tips, check out Steve McConnel's book on Rapid Development (Ignore the fact that it is produced by M$ press). This book is great, and if anyone is serious about software development they should read this book. And for the developers out there, please read his other book, Code Complete.

    1. Re:No such thing as a quick fix by Pointy_Hair · · Score: 1

      Amen. Communicate and negotiate, and not just with the project team. Project control is more than just agreeing with stakeholders and beating the horses to the finish line. If you know the schedule's a turd make sure you call it a turd and support that position with the rest of the project book (risks, issues, P&L, etc). Then when the inevitable slips occur, stakeholders are already on board to mitigate and move on. If you as a project manager don't have that control, your reputation as well as the success of the project is all but lost.

      Also another post included a remark about hiring developers that are craftsmen, implying people who have both competency and pride in their work. Same thing must apply to the project manager. There's a bunch of people around calling themselves PMs because they have MS Project installed on their PC, know how to schedule a meeting in Outlook, and maybe passed the PMP exam. I love those guys because I've made a career out of cleaning up their messes.

    2. Re:No such thing as a quick fix by s31523 · · Score: 1

      Here is a perfect example of successful communication and negotiation:
      On one project that I was called in to help out with, it was obvious that we had a schedule problem, and everyone said the customer will not tolerate a slip, yada yada. I went back and looked at the feature list, and said hey, we can get through a certification (this is software for airplanes and has to go through FAA) if we postpone these 2 features. I was told no you are wrong, we cant do that, and the customer won't have it. I went above their heads, to the president, and explained my plan, who then brought the customer to the table. This all happened two months before the alledged delivery date. I presented that the current list of features would not allow us to meet the aircraft certification date. I then proposed 3 alternatives. 1.) Pay for bonuses and overtime for people so that engineers can work 14 hour days for the next 2 months, 2.) Remove 2 feautres with "dumbed down versions" which we will still work after the original delivery date and provide as version 1.x later, but would still allow for the aircraft to meet its cert date. 3.) Slip the schedule. My plan worked, and the customer was impressed that we had a handle on things and that we gave them opttions early on which made them feel in control. They then informed us that the aircraft schedule actually was going to slip and it was OK for us to slip our schedule, but they weren't planning on telling us this and wanted us to hold true to our commitment anyway.... Had we waited until the day of delivery to notify management, things would not have gone this smoothly. It is all about communication and providing alternatives to management and customers.

  52. Re:Rapid Development: Taming Wild Software Schedul by s31523 · · Score: 1

    Here, Here! This book is great. The developers should read his other book, Code Complete!

  53. Fundamental problem with planning by beofli · · Score: 2, Interesting

    There is a fundamental problem with planning innovation (doing something you or others did not do before):
    Because you are doing something new, you cannot predict in front how much time you need as you don't know the problems you will encounter and the additional requirements/features that pop up during development (this always happens in software or system development).

    PS. I am talking about real innovation. Most real innovations are build upon existing ones. So this holds only is you maximize sharing or re-use of existing systems, and not repeating your same trick over and over again. I will even go so far as saying: if you did a good planning your development is problably not very efficient.

    1. Re:Fundamental problem with planning by ZorroXXX · · Score: 1
      ... you cannot predict in front how much time you need as you don't know the problems you will encounter ...

      This is by some called 2OI, second order of ignorance. The following is a short extract from my master thesis.

      One particular interesting article about software development is The Laws of Software Process by Phillip G. Armour which has a telling observation:
      In some circles, software process is considered to be the issue that needs to be resolved to fix "the software crisis". Improving process has become an article of faith in some corners, while avoiding it has assumed the status of guerrilla warfare in others.
      The author states that "Perhaps our problem isn't process, it's what we are asking process to do, and when and where we apply it." He then formulates three laws of software process based on what he defines as "The Five Orders of Ignorance":
      0OI - Lack of Ignorance. You know something.
      1OI - Lack of Knowledge. You know that you do not know something.
      2OI - Lack of Awareness. You do not know that you do not know something.
      3OI - Lack of Process. You have no method of converting 2OI into either 1OI or 0OI.
      4OI - Meta Ignorance. You do not know about the Five Orders of Ignorance.

      0th Order Ignorance, 0OI, represents when you have the answer and 1OI represents that you have a well defined question that can be answered. For these two levels detailed, well defined processes work well. On the other hand, for 2OI a detailed process, based on some pre-existing knowledge which might or might not be relevant, does not make sense. The different levels of ignorance must therefore be handled differently.

      The challenge is all projects have different quantities of 0OI, 1OI, 2OI, and even 3OI, and therefore require different types of processes.

      An alternative source should be "Armour, P.G. The five orders of ignorance. Commun. ACM 43, 10 (Oct. 2000), 17-20."

      --
      When you are sure of something, you probably are wrong (search for "Unskilled and Unaware of It").
  54. Re:Just say no (and more) - I agree by clay_buster · · Score: 1
    I agree with just about everything you have to say. We are doing a lot of work at a big customer to convince them that they need to get on board with a list of actions that is almost identical to yours.

    The only part I disagree with is a schedule. Its not that schedules are bad. Its that people aren't rewarded for being honest. We've tried to convince folks that they need to put everything they do on the schedule so that management can see the actual complexity and so that they get credit for what they do. Then, at the end-of-year review, they can go through some of the schedules/plans and say "I did this and that".

    I'd mod this up but I don't know what that means!

  55. You'll learn, I hope by Anonymous Coward · · Score: 0
    I was kind of suprised to see the recommendation for formal code reviews. In my experience those end up either as "hurt feelings" slugfests or

    This tells me that you don't have much experience, or any experience of well-run code reviews. It is not trivial to moderate a code review, but nor is it very difficult if the moderator has received a little training.

    In my experience (~30 years of it) properly-run code reviews are the best way known of improving code.

    Pair programming I find mostly a waste of time. It's just a way of using 2 people to do one person's work.

  56. Can anyone really estimate accurately? by Anonymous+Brave+Guy · · Score: 4, Insightful

    We would take the estimates, double them and add 30%, that is how I bid out all work.

    It's interesting to look down this thread and see how many different rules of thumb are employed, apparently by quite experienced developers/managers.

    It seems to me that we can make two reasonable assumptions based on this:

    1. Development usually takes longer than most engineers estimate up-front.
    2. No-one has yet found a reliable way to assess how much longer up-front.

    One might hypothesise, based on these assumptions, that any project plan that quotes hard figures up-front will be inaccurate most of the time, and without allowing a huge defensive overhead that inaccuracy will often be in the wrong direction.

    Now, working from unreliable estimates is in no-one's interests. If a company overestimates by too much on a fixed-price contract, it risks being undercut by a more realistic competitor. If it underestimates, it will look bad when things over-run, its profits will fall, and its reputation will suffer as well.

    So what conclusions can we draw from this?

    Firstly, if we're looking for realistic management, the way to go is almost always some sort of time and materials contract, with floating deadlines based on when features are actually ready. This allows good developers to do their job properly, which in the long run will be more efficient, and it means that other groups such as sales, marketing and customer support can be kept informed and given realistic expectations.

    Secondly, fixed-price contracts are only a good bet for a software development firm if it can include enough slack to be safe, without including so much that it can be undercut by more realistic competitors. The corollary, of course, is that if you're a client, you're almost inevitably going to be screwed by agreeing to a fixed-price contract, even without considering the lack of flexibility it entails.

    It is a rare project indeed that truly requires hard deadlines. Smart clients and smart development shops will reach a more flexible arrangement, and come to respect each other for having realistic expectations and providing realistic updates as time goes on.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    1. Re:Can anyone really estimate accurately? by ThePhilips · · Score: 1
      It is a rare project indeed that truly requires hard deadlines. Smart clients and smart development shops will reach a more flexible arrangement, and come to respect each other for having realistic expectations and providing realistic updates as time goes on.

      You are out of reality. I have never seen such close relations between developer and customer companies. (Uhm, okay, once: when our customer had no money available to pay for work already done.) It's just impossible to make such a flexible contract which would guaranty fair conditions for both developer and customer. Impossible.

      I cannot speak for management, but from my developer's pov the are really few options. Working under pressure of schedule is least pleasant task, especially when company's existance depends on the delivery on deadline. In such situations (I was facing them twice in last 5 years) I prioritize my tasks on future reusablity.

      In one case, I did lots of work to automate and document process. I made software work on its first deadline. The question was what company will do after i am gone. Company's hardware department missed deadline - software was "ready" (as much as software can be ready w/o hardware). I documented all stuff and then took safer option looking for better places to work. Management completely missed complexity of hardware platform. Software complexity was mitigated by my experience - hardware guy has never before developed PCI product and went from plain engineer to layout designer in under two years. But still working hardware was about one year away. There are no miracles.

      In second case, telecom start-up, meeting deadline was impossible. The software team decided internally to go on with development which can be potentially useful even if start-up would bankrupt. Minimum dependencies and high portability. Start-up was not able to find money to continue product development and was eventually sold out. The work software team did just before bankruptcy wasn't wasted: it works even now, under different name in different company located in the ex-office of the start-up, stuffed mostly with the start-up core members. But it works. I'm not there, but when I meet ex-colleagues still working there, they always bring topic that some pieces I made are still still work, still in use and new things get developed on the foundation.

      My morale would be that when faced with impossible schedule, try to develop personal realistic plan and go with it. Put on plan what is easy for you to do and what might be useful for scaled down schedule. Pressed with deadline, schedule might be reworked and scaled down to include fewer features - try to guess what might be on that minimized schdule. And go with it. It's impossible to cover everything - but learning to grasp essence is necessary. That comes with experience.

      Also, no good company/management would force its workers to do impossible. If they are not good - then changing job might be better choice.

      --
      All hope abandon ye who enter here.
    2. Re:Can anyone really estimate accurately? by Anonymous+Brave+Guy · · Score: 1

      You are out of reality. I have never seen such close relations between developer and customer companies.

      That's odd. I've been doing software development full-time for nearly a decade, with plenty of relevant experience before that too. I've rarely seen a successful project that didn't operate with such a relationship, and rarely seen a failing project that did. Perhaps that's why the companies I've worked for have generally been successful.

      It's just impossible to make such a flexible contract which would guaranty fair conditions for both developer and customer. Impossible.

      What can be fairer than paying someone at a fair rate based on the amount of work they've actually done to meet your needs?

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    3. Re:Can anyone really estimate accurately? by angel'o'sphere · · Score: 1

      It seems to me that we can make two reasonable assumptions based on this:

      Development usually takes longer than most engineers estimate up-front.
      No-one has yet found a reliable way to assess how much longer up-front.


      This is wrong. Lots of work has been done to make such estimations working and good. E.g "personal software process" and "SCRUM" as well as RUP have a well defiend way how you make your estimates.

      a) First off all, you need to MAKE estimates and keep book of them. After the project is over, or a part of the estimated artifacts are done, check your estimates versus real efford. Calculate the percentage that you are off, recalculate the rest of the project based on this.

      b) make a final post mortem after the delievery, check/recalculate he correction factor, keep track of the estikmated, the real efford and the correction factor

      c) in new estimates for new projects try to find "pieces" of work of similar complexity/efford in your old estimates. Thats VERY easy done if the new project is a follow up on the previosu one and involves adding of features. Use the REAL efford of a already done piece as base for the estimate of the new piece. (E.g. you wrote a web interface to a POP server, now you have to do an IMAP server, part of that is making an account with server/user/password/port etc. Can you resue that? Can you adapt it to reuse it?) Use your correction factor to make your estimate better.

      d) Having projects in similar areas: e.g. only doing accouinting systems, or only doing web applicatiosn with similar backend technologie, helps!

      e) Having a more or less static team, or ppl who leave replaced by similar skilled ones helps.

      Your correction factor will be quite big in the beginning. But with the history of old estimates and old real effords, you will get better estimates pretty fast and the factor will become very small.

      Within a year your estimates will be only 10% off (+/-) and in 3 years your estimatiosn will be probably accurate to 0.5%.

      Big benefit: having such a history of "Use cases" or "Tasks" + their estimated efford + their real efford helps a lot in getting amunition in talks to managers.

      E.g.)
      You: "Sir, look here: thise part of the system can never be done with 30 person days! We did a similar project 2 years ago, and needed 45 days. Now we have a new employee responsible for tis part. He will even need more time as he is not that experienced yet."

      Manager: "I see. What can we do about that? Can we add one man more? Or what about reducing the features of that part of the system? Can we shift the staffing and a more experianced developer gets that part to do?"

      Anyway, you get the idea.

      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    4. Re:Can anyone really estimate accurately? by angel'o'sphere · · Score: 1

      It's just impossible to make such a flexible contract which would guaranty fair conditions for both developer and customer. Impossible.
      Well, I understand your point, but its not like that.

      There is an agile project development method called SCRUM, see: www.scrumalliance.org. That development method releis completely on the idea that the project owner prioritieses featers and the develpment team picks the top X features they can do in one sprint. Sprints have fixed lengthes, including planing and post mortem we can say 4 weeks. The customer pays every 4 weeks for the "time" efford.

      However, not many customers are ready to make contracts based on SCRUM. OTOH, lots of SCRUM projects are running very good, the rate of failure is very low and the development costs for the customers often got reduced by significant percentages.

      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    5. Re:Can anyone really estimate accurately? by Anonymous+Brave+Guy · · Score: 1

      Anyway, you get the idea.

      The idea you describe seems to be that if you've done a project before, then you can use the time that took as a guideline to help estimate future, similar projects. Sure, that's common sense, and a sensible thing to do. But what if most of your projects aren't related to what's gone before?

      We recently hit a textbook example of what can go wrong: a new feature was estimated as taking six weeks for a single developer to implement, which was pretty accurate for the new design and code. Unfortunately, after more than a decade of incremental development, the underlying architecture was fundamentally flawed. For the most part, it worked well enough to support the existing features built on top of it (though the count of outstanding bugs at boundary cases was starting to mount up). However, the design had evolved without much control and oversight for a long time, and consequently it wasn't in good enough shape to extend straightforwardly to support our new feature.

      Thus, although the high-level code was in place and working correctly pretty much on schedule, the actual project took more like six months than six weeks, with the extra time spent reworking all those incremental developments back into a coherent overall design that was then fit to extend to support the new functionality required. No-one in management saw this coming; it was just the time that the inevitable consequences of allowing ad-hoc development for extended periods came back to haunt that particular project. The extra work brought other benefits too, including fixing pretty much all of those awkward boundary case bugs. But it still took way longer than the estimate, for reasons no-one involved in the planning saw coming.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    6. Re:Can anyone really estimate accurately? by angel'o'sphere · · Score: 1

      Yeah,

      stuff like you describe still can happen. I'm not sure if I understood it correctly, but I think you probably had upfront a not well designed archtecture (so I understand your sentence: reworking all those incremental developments back into a coherent overall design).

      My point is: making estimates is not a throw away task. Estimates kinda have to be versioned like code in a repository for later reference.

      Even your bad running project could now have a estimated versus real efford history, and some background data what went wrong and how it got resolved. In future you might have a similar project which you plan and design completely different from what you have learned yet.

      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
  57. Review checklist by amightywind · · Score: 2, Interesting
    was kind of suprised to see the recommendation for formal code reviews. In my experience those end up either as "hurt feelings" slugfests or, just as ineffectively, full of "you should put a space after this brace" comments. I feel that pair programming is more effective way of getting multiple eyes on the code, spreading knowledge around, training the new guys, and all that good stuff.

    A good way to avoid pissing matches over brace indentation and other nits is to lay down a qualification checklist that must be clean before a review. It can be simple of extensive depending on your field. What slows the review process is a moving quality target that varies with reviewers. A checklist helps prevent that. Pair programming is a drastic waste of programmer time. What you typically get is an alpha who overwhelms and neutralizes the work of his partner.

    --
    an ill wind that blows no good
    1. Re:Review checklist by ZorroXXX · · Score: 1
      Pair programming is a drastic waste of programmer time.
      I think this claim is false. According to this article the time spent overhead is only 15% and that not a drastic amount. Nor is it waste; pair programming is a quality investment reducing bugs as well as having other positive effects like improving learning, satisfaction, communication, etc.

      What you typically get is an alpha who overwhelms and neutralizes the work of his partner.
      There is of course no guarantee that this will not happen, but in that case they are not doing proper pair programming. The book Pair Programming Illuminated by Laurie Williams and Robert Kessler addresses several of the practical aspects of pair programming and there is a chapter titled My Partner Is a Total Loser and Other Excess Ego Problems which deals with this.
      --
      When you are sure of something, you probably are wrong (search for "Unskilled and Unaware of It").
  58. Sounds like engineering by thethibs · · Score: 2, Insightful

    Intriguing--this sounds like what real engineers call engineering. Summarizing:

    1. Have a clear understanding of what needs to be built before you start work on it.
    2. Have a plan for building it.
    3. Have a process for staying focussed on the objective.
    --
    I'm a Programmer. That's one level above Software Engineer and one level below Engineer.
  59. And the question du jour is ... by Aceticon · · Score: 1

    ... does a coder with multiple personality disorder really need a collegue for pair programming?

  60. There's an old saying... by SloppyElvis · · Score: 1

    "Work expands to fill the time alotted for it."

    This is one reason why software is NEVER completed before the estimated date. If you're doubling the estimates, you'd best not let the engineers know that you've done so.

  61. Nooooooooo!!!!!! by mrjb · · Score: 1

    Learn to use copy and paste ... learn to type quickly This is the absolute worst advice I've ever read about programming. Need to add a parameter to a piece of code that has been copy/pasted 10 times? You'll multiply your work by 10.

    Ever copy/pasted a piece of code into *another* piece of copy/pasted code and need to make a change afterwards? Prepare to increase your workload by a factor 100. Do it again and it's a factor 1000. And you just might have duplicated a bug. Before you know it, you'll be drowning yourself in repetitive, boring work and bugs that keep popping up after you thought for the Nth time that you fixed them *for real* this time. Even if you're the fastest typist in the world, no amount of words per minute will be a match for spending five minutes of your time to abstract your repeated code into a function.

    This is also shows why lines of code per day is a bad measure of productivity: the better a programmer is, the less lines of code (s)he needs to implement the same features.

    Finally, another indication that repetition is bad: I was going to give this a subject with a lot more O's in there but the lameness filter stopped it. Reason: Too much repetition. How appropriate.

    --
    Visit http://ringbreak.dnd.utwente.nl/~mrjb/growingbettersoftware to download your free copy of the book
  62. just redefine your budget and you can do all 3 by davidwr · · Score: 1

    Aim for quality then pick a realistic budget and schedule to match. Better yet, double the schedule and double the budget, then you can look really good when you come in way under budget and way early.

    Note he didn't say he did it "cheap" or "fast" only "on time and under budget."

    --
    Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
  63. No, the cat does not "got my tongue." by Impy+the+Impiuos+Imp · · Score: 1

    > "How to do smart software development even when facing impossible schedules."

    Here's the answer: "Remember that study from last year that found the top programmers were 4x as productive as the average programmers, and that there were things the top programmers could do that average programmers couldn't, no matter how long they were given? Hire some of them guys."

    --
    (-1: Post disagrees with my already-settled worldview) is not a valid mod option.
  64. Engineers survival kit. 3 solid tips. by JustNiz · · Score: 2, Informative

    ...so last project you worked 40 hour weekends to bail management out yet again. The real problem: Now you've raised their expactations of whats possible, and they'll expect that and more next time. Its the Scotty principle.

    If you want to continue to give your whole life to your comapny in the mistaken concept that you'll get recognition for it later then chances are you're still a naieve new grad. Experienced engineers know they have to train their managers.

    After 25+ years of software development heere's what I learnt works best:

    * Demand the necessary time to do good work, no matter what time problems that may cause others. Reason: You will actually need about the same time, no matter what quality concessions you make. Furthermore, your manager should have had involved you in his time-estimates for project planning. This is management 101. If he didn't then this is the only way you'll convince him to involve you next time.

    * Don't ever agree to deliver low-quality product, regardless of other peoples deadlines. Reason: Non-techincal managers mistakenly believe that time can be saved by sacrificing quality. Actually the opposite is true. Low quality software takes more time overall. Furthermore, if you deliver crappy software, people will forever identify you as being a crappy engineer, regardless of any justifications you may have had at the time. If you're a crappy engineer you're like too many others and worth nothing.

    * Don't work overtime unless you both want to and are being paid extra for it. Reason: Your employer is making significantly more money from your work than they are paying you. If they weren't, they wouldn't keep you there. Its basic business economics. They are not a charity and you deserve to be paid and treated just like any other professional. Furthermore, it does nobody any favors if you set urealistic norms and expectations. Yet another reason is that you are far more effective if you're not continually burned-out.

    The BIG secret your company doesn't want you to know:
    Nearly all deadlines are just artificial mechanisms created by management and designed solely to get free overtime/more productivity from the workforce. They usually have no relation to what delivery date was acutally agreed with the customer.

  65. Has this ever worked? by spectro · · Score: 1

    So nice recipe, looks good, has somebody put it in practice already?, where are the case studies?
    If you are in a bind like this one, better take a look at SCRUM or any other of the Agile Processes that are PROVEN to work.

    --
    HTML is obsolete. It's time for a new, simpler and richer markup language.
  66. 2.5 hour reviews by Anonymous Coward · · Score: 1, Interesting

    I agree with the value of code reviews, but there's no way you're going to get developers together for 2.5 hour meetings on a regular basis! This is EXACTLY why we no longer have a policy for review meetings. We're using a tool now, Code Collaborator - http://www.codecollab.com/ and it's pretty spiffy. I think probably the most time I've spent on any one review was 30 minutes. We also trialed a couple other code review applications, but they all could be improved, to make doing code reviews easy. Does anyone know of a feature by feature analysis of the code review applications that are available, and what SCM systems they support (we use Perforce)?

  67. It's just SCRUM anyway by jaaron · · Score: 1

    Seriously, one could fairly easily convert this guy's suggestion to SCUM:

    • Vision and scope document = Product backlog
    • Work breakdown structure = Sprints and task estimation
    • Code review = Sprint review
    And with SCRUM you have a much larger pool of resources for help, suggestions, and case studies.
    --
    Who said Freedom was Fair?
  68. Accurate estimation not as easy as advertised. by SlideRuleGuy · · Score: 1

    The article states that, "If two people disagree on how long a task takes, it's likely that...each person made different assumptions about details of the work..." If only it were that easy! Given that developers vary from 1-4x in productivity (or 1-10x, if you read Tom DeMarco's _Controlling Software Projects_), any hope of estimating accurately, especially on small projects with only a few developers, is, well...hopeless.

  69. Re:Just say no (and more) - I agree by janolder · · Score: 1
    Note that I mentioned the questionable nature of schedules in my list of items that Peopleware talks about. I don't think there is enough research available to form a conclusive opinion on that matter.

    I think schedules are an interesting subject that can take pages to cover. A few thoughts anyway:

    • Developers vary greatly in skill, education and motivation. Peopleware claims that the spread is 1 to 100 across industries (in other words, developer A takes 1 week for a task, developer B takes a couple of years for the same task). Personally, I've found the spread to be more like 1 to 20, which is still considerable. Joel has a nice article on the matter also.
    • I've found that those at the high end require very little prodding to get things done. They work for the love of coding and for the enjoyment of shipping good code. This is the type of developer that doesn't need a deadline to get moving and may actually get frustrated and become ineffective when faced with a lot of red tape. This is also the type of developer you want to hire.
    • If you have a team of mid range developers, schedules may be needed. Fortunately, I've never been in that position. That said, the company I currently work at has very detailed schedules, milestones and deadlines. Does that help or hinder all things considered? I can't honestly say. We do spend a lot of time maintaining that schedule and I get a feeling that it is a source of frustration for many. Personally, I'd rather do something productive. Working on a schedule does not result in a single line of code.
    • Some developers require daily milestones and continuous supervision. Usually combined with low performance, they're both time intensive to manage and a drag on the team and the project. I've come to conclude that it is necessary to let go of this type of developer sooner rather than later.
  70. I don't take it as a dig... by chaboud · · Score: 1

    But you did read that last paragraph, right? I don't think I exemplify anything other than an unreasonable emotional attachment to my product that allows me to be taken advantage of.

    I essentially said that, if you kick things out the door through lots of late nights, people will come to know you as someone who finishes well. Then they'll give you more work to do. I didn't say this was good. There generally aren't performance bonuses (unless they've been agreed to before), large amounts of comp time, or cool perks awaiting those who completely bust themselves to get something done.

    If you love the product and the work, that can be a reason to do it, but don't do it because you think it will get you much more than a "sucker" stamp on your forehead. It won't.

  71. If your engineers are missing their own estimates by complexmath · · Score: 1

    then either your engineers stink or you've put them in an impossible situation. A good engineer will rarely miss an estimate made with sufficient information unless you're pressuring them to commit to an unrealistic timeframe, asking them to develop something for which they had no input or control at the design phase, or you keep surprising them with other work that has a higher priority than their project work. As for sufficient information--if the engineer doesn't know enough to make an accurate estimate it is his responsibility to say so, and if you ignore that then it's not his problem when he misses a date. A relevant article here is Joel's piece on "The Development Abstraction Layer": http://www.joelonsoftware.com/articles/Development Abstraction.html

  72. exactly... think long term. by sevinkey · · Score: 1

    I have lost many contract opportunities because of honest estimates, but I have received so much other business because of that honesty that you wouldn't believe it. And now because I confronted this issue upfront, rather than giving a low-ball estimate, I don't have to have a confrontation at delivery time, because all the cards were on the table for the start. And now these clients trust my opinion, because I was willing to give them the honest and difficult truth that I cannot make them happy for the price they wanted to pay.

    Honesty. These clients need someone they can trust to build their software, because they have absolutely no idea. Just because the business world forces you to swim with the sharks, doesn't mean you have to become one. Just try not to be a tuna, so you don't get eaten. So make that honesty and gonads.

  73. Older estimation formulas by hicksw · · Score: 1

    This rule of thumb shows its age:

    For COBOL programmers, multiply estimate by THREE.
    For FORTRAN programmers, multiply estimate by PI.

  74. Re: Reviews by tcgroat · · Score: 1
    If review is allotted only 2-1/2 hours, either the review is ineffective or you're deceiving yourself about how much time they really take. TFA is disingenuous when it says reviews take up 2-1/2 hours; it talks about having multiple 2-1/2 hour reviews. Review cycles logically occur at each step of the design hierarchy. The total time involved is far higher than 2-1/2 hours, but it is time well spent if it is spent properly.


    A proper review means giving the reviewers review time, not just dropping a pile of code in front of each attendee 30 minutes before the meeting. The reviewers need time to comprehend what's being presented, to look for logical inconsistencies, to ponder what the user may do that wasn't allowed for, to track down unintended interactions, to find the right questions to ask. A reasonable figure is two hours of prep time for reviewers, spent at least a day in advance (the subconsious mind of sleeping reviewer is a powerful tool). Then the review meeting can move faster, while also being more effective.


    If reviewers must start cold, finding a missing delimiter is a best case scenario. More likely, the meeting will be spent handling superfluous questions that arise because the reviewers don't understand the items being reviewed.


    The article talks about fixing bugs during the review. YIKES! Impromptu decision-making is a recipe for compounding errors, especially when under the gaze of upper management. Every problem a reviewer brings to the table should come with a thoughtful plan of attack. Wild-ass guesses inevitably cause new problems, further corrections, and additional schedule delays.

  75. You lost me at "he" by antiem · · Score: 1

    I would have read this article if you had left some room open for the lead-programmer to be a woman.

    I understand that most people here will think I'm overreacting. We all know that it's easier to wrtie "he" than "he or she" and that if you're going to pick one gender, the most commonly picked is the male. (Quite frankly, in this line of work, you're probably right to pick "he.") If you pick the female, you're making a statement rather than just avoiding the lengthy and cumbersome "he or she." But seriously, there is so much discrimination against women in the programming world that we need to be helping women to imagine that they might be the lead-programmer rather than assuming the lead-programmer is a man.

    If you were programming, you would be more specific about the possible values for a given variable.