I have always wondered about project management between hardware companies and software companies. I was reading this thread about GPU designs from ATI and nVidia hitting store shelves in May, and in the thread there was a brief discussion of Half Life 2 and when it's likely to arrive on store shelves - or to ship with the cards.
And this got me thinking, here we have two companies (ATI & nVidia) working on projects with probably around 70 engineers doing a task that is essentially like software writing (the majority of the work designing graphics chips nowadays involves RTL coding and debug- which is very similar to writing and debugging software) and they are coordinating with similar schedules from other groups (the drivers group, for example) and other companies (the company providing the package, the fab vendor making the silicon, and all of the OEM's that are designing boards in parallel with the silicon design). You have all this complexity and all of these people working in parallel and the designs are coming out within a quarter of the schedule that was determined at least 18 months ago - if not more likely to be 24 to 36 months ago.
Meanwhile we have a game company (Valve) designing a game with a team of... let's guess 50 programmers. They are designing software, they are not coordinating with deliverables from a lot of other companies (ok, maybe the box and the CD printer) and they are steadily slipping quarter after quarter.
I don't get it. Three teams doing very similar jobs (programming) to what were originally similar schedules and one can't seem to achieve remotely close to their original project management schedules, while the other two are really close. Looking at Microsoft, I see a similar problem with software that they develop. One might argue that they are fundamentally different tasks - programming software and designing CPU's - but I design chips and I program fairly complex designs and I see a lot more similarities than I do differences.
Personally, I think that software is more tightly coupled with marketing - and there is too strong a tendancy for "feature creep". With all of the teams working together on hardware and the fixed costs to manufacturing (ie. fabs, contracts with OEMs, etc.), there are fairly well defined windows as to when features are "frozen". I don't see similar discipline in software programming. Features are added and changed without deep thought as to the long term repercussions to schedule - or to the long-term health of the product (ie. patches to fix security holes, improve performance, etc.). I have to wonder why isn't there the discipline to freeze features in a timely manner in software design?
Anyone else have any thoughts on the subject?
And this got me thinking, here we have two companies (ATI & nVidia) working on projects with probably around 70 engineers doing a task that is essentially like software writing (the majority of the work designing graphics chips nowadays involves RTL coding and debug- which is very similar to writing and debugging software) and they are coordinating with similar schedules from other groups (the drivers group, for example) and other companies (the company providing the package, the fab vendor making the silicon, and all of the OEM's that are designing boards in parallel with the silicon design). You have all this complexity and all of these people working in parallel and the designs are coming out within a quarter of the schedule that was determined at least 18 months ago - if not more likely to be 24 to 36 months ago.
Meanwhile we have a game company (Valve) designing a game with a team of... let's guess 50 programmers. They are designing software, they are not coordinating with deliverables from a lot of other companies (ok, maybe the box and the CD printer) and they are steadily slipping quarter after quarter.
I don't get it. Three teams doing very similar jobs (programming) to what were originally similar schedules and one can't seem to achieve remotely close to their original project management schedules, while the other two are really close. Looking at Microsoft, I see a similar problem with software that they develop. One might argue that they are fundamentally different tasks - programming software and designing CPU's - but I design chips and I program fairly complex designs and I see a lot more similarities than I do differences.
Personally, I think that software is more tightly coupled with marketing - and there is too strong a tendancy for "feature creep". With all of the teams working together on hardware and the fixed costs to manufacturing (ie. fabs, contracts with OEMs, etc.), there are fairly well defined windows as to when features are "frozen". I don't see similar discipline in software programming. Features are added and changed without deep thought as to the long term repercussions to schedule - or to the long-term health of the product (ie. patches to fix security holes, improve performance, etc.). I have to wonder why isn't there the discipline to freeze features in a timely manner in software design?
Anyone else have any thoughts on the subject?