DISQUS

Inc.: Thread

  • jim · 2 years ago
    I think the Extreme programming methodology, of (more or less) having small iterative rounds of functioning deliverables with feedback from the customer over the next round, is something more likely to fix problems, than is imagining everything can be perfectly planned and estimated. Especially for the majority of shops which don`t produce software for a living as a reason for the company, but produce it for internal needs.
  • dave · 2 years ago
    I was on the WinFS development team. There were plenty of smart guys working hard and working smart. IMHO, WinFS was killed by feature creep. Billg had a vision, which many of us thought was a great vision. What microsoft needed to do was deliver Billg`s vision as WinFS 3.0, and figure out what was needed for WinFS 1.0. They didn`t. They tried to pack everything in Billg`s vision, and all of their own pet features, into version 1.0. Everything was bloated and over complicated, and unbelievably inter-dependant.

    Every complex software system is built in layers, where Version 2 of a system is built upon the solid foundations of Version 1, as well as the foundations of other solid modules. Most of the major components in WinFS were experimental beta versions, from SQL Server 2005 (this was in 2002), the C# UDF`s, including managed C# built on experimental visual studio features, to the new wave of XML support in the database and office products. Meanwhile, it was absolutely assumed that everything had to be backward compatible with old-n-busted versions. Add to this the mantra that eventually 350 million computers would be running vista, including grandmas, with a built-in SQL server database, with no DBA, that can never fail... Unrealistic expectations.
  • Bill Lyons · 2 years ago
    In my own experience about 5 hours a day is the optimal work schedule. It should be left open-ended, of course, sometimes I`ll work as much as 10 or 11 hours if I`m really into it.
  • Kevin · 2 years ago
    While well intentioned, I think Joel is a little off target here.

    1. Requirements actually are the number 1 cause of software project failures, not the developers involved. Review the Standish group`s Chaos report for one of my references here.

    2. Requiring superstar developers because they`re 10 times more productive than the "merely excellent developers" is equivalent to requiring heroes to do your work. I`m not sure why Joel thinks it is OK to have this requirement for heroes while heroics aren`t recommended. Reality is that software projects can be done reasonably without heroics or heroes.

    3. Requiring one-size fits all estimation practices is inappropriate. Tailor your estimation to your project. In some projects, it may be appropriate to have your developers dissect the problem down to 2 day or less increments of work. On others, this may stifle creativity. Whatever you do, however, be sure to estimate risk and rework because there will always be surprises, no matter how detailed you get in your estimates. Once you`ve got your estimates, take a step back and roll-up the numbers before establishing project milestones, creating a schedule, and presenting that to project stakeholders.
  • Database Programmer · 2 years ago
    Mistake No. 0: coming up with a nutty project idea in the first place. The only reason for this was so Microsoft could waggle a finger in the face of Oracle.
  • Cory · 2 years ago
    Joel is correct in everything he says. But he`s missing some "gotchas" and his list should be longer, probably much longer. Add in what Kevin from Portland wrote, ten other things I could add off the top of my head (but won`t because, really, who is going to care?), and you`ll get at least a "Top Ten" list. My question is: Is are these problems ever going to be fixed (or at least mitigated)? I don`t think so, it appears to be human nature. Consider: With all the education and standardized testing that doctors and lawyers, et al. endure, you think all of them are competent?
  • T. Alex Beamish · 2 years ago
    Some excellent comments -- good to hear from the WinFS guy -- absolutely right, you cannot deliver the Cadillac with verion 1.0. And the XP guy and I agree -- do small iterations, always have something you can test and deliver. Build slowly and carefully.

    Microsoft in particular is a victim of its own success -- having to support a bazillion kinds of hardware and be backward compatible at the same time. It`s an impossible task.

    Joel sounds like a really intersting guy, but I disagree with nailing a developer down to milestones. I`d rather develop something a few small pieces at a time, and be able to demo that to the stakeholder. And if the stakeholder has a release date in mind, then I`ll work towards that date, working my way down the feature list, and whatever makes it into the release by the deadline is whatever makes it into the release.

    I`d rather deliver a slimmer, well-built piece of code, than something we smashed together to meet some deadline that no one wants to touch afterwards. As Joel himself says, it`s a marathon, not a sprint.
  • Jay Harrell · 2 years ago
    Joel first says: "When you ask developers for one, however, many of them will respond by creating a schedule that breaks pieces of the process into weeks."

    Then Joel says: "but I do this cautiously and build an extra three weeks into the schedule for the incoming developer who`s learning the new code, and an extra week for the outgoing developer"

    Come on, which is it? Could it be that software development naturally breaks down into week-long chunks? Certainly sounds that way from quote #2, else Joel would have added 15 days for the learning curve, which ends up sounding ridiculously precise. In my experience, single days (or hours) have far too much variability in their level of productivity to be useful measures, whereas weeks have much less variance. Hence, schedules in weeks are wrong less often. Requiring schedules in days or hours is just another form of Mistake #3.
  • Mark · 2 years ago
    Joel is dead wrong about the 40 hour work week, 8 hour day being best. Developers work in great bursts of inspiration, enthusiasm, and effort. One week may be an 80 hours week, and very, very productive. But if a developer is burnt out, and not feeling inspired, they will not be productive, they should not be there filling a chair for 8 hours. They should be out riding a bike, or doing some hobby. These productive bursts can not and should not be scheduled a la the `death march`. `Comp time` is a good way to handle this unbalanced work schedule. He`s mostly right about the other things though.
  • Shirley Zhao · 2 years ago
    Totally disagree with the mediocre developer comments. It really depends on what types of project you are doing. The keypoint is there are projects that the best developers wouldn`t want to do, and you got to make the mediocre ones work. I`ve had experience being very critical on developer`s quality of work, but over the time I`ve also learned that there are ways to make mediocre ones do their job right.
  • jz · 2 years ago
    who says winFS was a failure?

    pretend you`re interviewing for a top position at m$, and the high-IQ question they ask you: "Define winFS as a success"
  • Bruce Goldstein · 2 years ago
    I agree with most of joel`s comments but think that if you are building software for a specific client (rather than as a product) than you really need to do iterative development with the client providing explicit feedback. I have yet to have a consulting style project work based on a fixed schedule, even with great requirements as the client sees it and goes "oh I said X but now that I can see and use the beta version I really meant Y".

    Iterations should be planned out with early iterations having explicit project plans (like version 0.1) and later iterations just having milestones as explicit planning is a bit of a waste of time as it only would work if iteration 1 goes perfectly in terms of client response and it never does.

    Bruce
  • Wang Chung Yoon · 2 years ago
    "It`s a marathon, not a sprint."

    I find this comment funny, in the context of Agile software development. IMHO, it`s only a marathon if you look at it as such. I prefer to look at a project as a series of small sprints. In the end, you get the same output. The difference is that one is much less daunting to think about. Divide and Conquer.
  • Fred · 2 years ago
    Mr. Spolsky is partly right. Using old-fashioned management tends to fail on software projects. But there are other, more essential inputs:

    1. You have to have a market. The coders who put together all the spreadsheets that competed with Microsoft Excel didn`t all fail technically. They ran into Microsoft`s marketing muscle.

    For embedded code, it isn`t enough to have technical success. Somebody has to want to buy the airplane or telecomm gear you`ve made.

    2. It helps greatly to have managers who know what they are doing. I`ve written code for people who turned out not to know what a computer really is, nor what software is. People like this drive projects over cliffs.

    3. It helps greatly to have customers who know what they want. It is quite hard for computer users to get used to a new system, especially if the new system is just barely working. It is easy for them to throw an expensive system in the trash and blame the software. It is impossible for them to know if a product is going to start working for them next week, or never.

    4. Sometimes it isn`t much of a cure to involve the users in the development; They have their own jobs to do and can`t spare the time to work on creating software.

    5. Software developers themselves don`t know if they`re incompetent. I`ve taken over half-finished projects from other coders and found hard-working, diligent souls can produce an utter mess. And neither they nor their bosses had any idea how incompetent they were.
  • Patrick Brady · 2 years ago
    Joel,

    How can you say that `...a bad team of developers tends to be the no. 1 cause of software project failures...`? Who says? I usually enjoy reading your articles but I have noticed that you tend to make these wild claims without including any reference to support your claims.

    Failed software projects are usually never a result of any one single cause and blaming the large percentage of failed projects on an imaginary population of `bad developers` is both naive and irresponsible. In my experience bad developers are either fired or delegated to making coffee for the rest of the team. They usually don’t last long in any one organization and tend to bounce from one job to the next.
  • B Mack · 2 years ago
    Joel is an idiot who doesn`t practice what he preaches. "Don`t write your own programming language... but I use Wasabi" (what a stupid name by the way)

    So which of these is the reason Copilot is a failure? Try logmein.com... it`s much better... and free!
  • Jeferson Spencer · 2 years ago
    Hi Joel.
    A good opinion but I disagree with you when you talk about that the first mistake are mediocre team of developers because I dont`t understand what are a mediocre team for you.
    I think that a mediocre team is a team that don`t want read, don`t want work, don`t want learn, don`t have atitude. If a developer have little bit technical knowledge but want to learn and have atitude it`s a very good developer and I want he in my team and he is not a mediocre developer.
  • Evan Robinson · 2 years ago
    On average, Joel is dead right about 5 eight hour days for a 40 hour week. Check out "Why Crunch Mode Doesn`t Work: 6 Lessons" at the IGDA site at http://www.igda.org/articles/erobinson_crunch.php
  • Jamie · 2 years ago
    I think Joel is well off in wanting to have an entire team of superstar developers. Imagine the tedious arguments and the effort involved in managing all those egos. IMHO some of the guys who I have worked with that were the best programmers by themselves were hopeless at working in a team and meeting customer`s requirements.

    This idea of having to breakup milestones into daily or hourly chunks also seems ludicrous to me. As an individual developer I often try and work out what I want to have done by the end of the day, but to manage this into some kind of project plan is not possible
  • Dan · 2 years ago
    Speaking of easy ways to fail: there`s an href on line 1452 of the source that`s incomplete and unclosed: :)
  • Olga · 2 years ago
    All so true! I even sent it to my boss:) Speaking of creating software that somebody will want to buy – the concept/idea usually comes long before the actual development process – so it’s not what the article is about; and ‘not long lasting bad programmers’ somehow get enough time to do the job(!) that requires unbelievably long time to fix the mess:(
  • Brad Gregory · 2 years ago
    I think that Paul Graham has hit the nail right on the head in his book, "Hackers and Painters", where he points out that software development is really a creative artistic process and not a precise scientific process.
    Software developers are artists not scientists, and until this is really understood and managed as such, if "management" is really required, software development efforts will continue to "fail".
    When you ask an artist to create a work of art, such as a sculpture or a painting, would you ask for a schedule? No. You would wait until the the artist believes he has finished.
    I believe we need to shift towards the idea that software development is not something that can be controlled and managed precisely, but instead is an artistic process given freedom to `evolve` into a solution over a flexible time scale. i.e. think art and not science.
  • Anthony Stevens · 2 years ago
    Joel has it both very right and very wrong.

    Right:

    40 hour (max) work weeks. I like what the previous commenter said about "bursts of inspiration", followed by comp time. You can`t burn your devs out and expect results.

    Superstar developers. Imagine any other challenging field that requires intelligence, experience, and perspective, and hearing management say "We can get away with mediocre staff." Mediocre developers = mediocre (or worse) results.

    Wrong:

    Requiring developers to estimate out every nth detail to the sub-day level. This is just plain dumb, because by the time you get the estimates done the client has shifted the goalposts to reflect either (a) their new understanding of the capabilities of the software, or (b) their changing business environment, or (c) their modified budget, or (d) etc. etc. etc.

    Joel has some crazy pathological aversion to agile software development methods, but they are sane and they work.
  • Molly · 2 years ago
    Just curious what everyone thinks. I have read the criticism about estimating your tasks, so my question is that is how does management get the info it needs to report on progress and a delivery date? The stakeholders (the ones paying for the project) have a vested interest in knowing this, and hearing that the artists are at work and they`ll let us know is not going to fly.
  • Jeff · 2 years ago
    It all depends on how you value your team. Mediocre is in the eyes of the beholder. For an alternative see role-based recruiting at
    http://theschmitzer.blogspot.com/2007/10/role-b...
  • Matt Warren · 2 years ago
    Building software is hard, Joel. Enter "Primal Development Methodology" in your favorite search engine and learn the truth.
  • Joe Gleinser · 2 years ago
    As a technology service provider I can support the argument that many projects fail. In fact I strongly recommend my SMB clients avoid custom designed software or even customized software. The payback to a $4 million per company will probably never justify a $150k investment and $50k per year in recurring costs. Even customized softare should be written with the expectation to throw it all away when the next retail version of the software is released.

    http://gcs-tech.blogspot.com/
  • End User · 2 years ago
    He forgot the biggest reason software fails. Nobody ever asks the end user what he or she really needs. The federal government is famous for spending gazillions on a new software project that only a few talking heads in Washington DC have any input on. After years of overages, programming catastrophes and bankrupt contractors that disappear into the night - the product is finally completed by somebody`s twelve year old kid and it is completely un-responsive to the needs of the end user. This is the oldest story in the book. Ask anybody that works for any federal government agency.
  • Darrell Teague · 2 years ago
    There were a lot of comments regarding speculative claims lacking empirical evidence. The facts are that most large software projects fail (Jones, 1994, 2000). Developer productivity does vary by a factor of 1 to 10 (Jones, DeMarco, McConnell, etc). My own evidence after 20 years of doing software projects: Mediocre developers are not very productive and ultimately create more bugs than necessary. Conversely, stellar developers build incredible things and quickly (Google, Amazon, BlueNile, etc). Consider that a two-person team wrote a commerce engine that supports real-time trading of millions of dollars in transactions in eight weeks. A similar endeavor took a team of 30 mediocre folks a year to build a system that barely functions. So yes, agile is a best-practice, Joel is right and so are many others. Software engineering isn`t easy and frankly, if you have to build a bridge do you want the "A" team or the "C" students from the local university?
  • Keith Ujvary · 2 years ago
    Would you consider implementing a service where we can get copies of this article sent to our "leaders" anonymously? I am currently on a 5 out of 5 project (all 5 failure reasons in play at once). While I am quietly singing the "Train Wreck Project Blues", all my bosses want to hear is "God Rest Ye Merry Gentlemen" / "Tidings of Comfort and Joy"
  • Ryan Thompson · 2 years ago
    This is a great list that can be applied to almost any discipline. I can`t count the number of times we`ve been asked to squeeze 16 weeks of tasks into 12 weeks to meet a deadline. Net results...frustration, fatigue and potentially a watered down product. Honesty about timelines and setting those expectations at the forefront of a project is critical in avoiding a failure.