| TIP: Click on subject to list as thread! | ANSI |
| echo: | |
|---|---|
| to: | |
| from: | |
| date: | |
| subject: | RE: [C] Threadjack II: Schedules and deadlines |
From: Bob Stout On Sun, 2 May 2004, Roger Scudder wrote: > During the time I worked on that project I saw a lot of things that I > believe contributed to its demise. The most significant problem IMHO > was that the programmer who was in the role of designer did not have > enough experience to tackle the technical problems. The suggestion was > made that a consultant be retained to help with the design, but this > person managed to convince the team that he was up to the challenge. > Another thing that that had a negative impact was personal ego. One > team member seemed to be obsessed with making a name for himself by > writing super tight super efficient code. The result was (as I had > warned it would be) code that suffered so badly from binding that it was > near to impossible to maintain. This person ended up having to rewrite > more than once. Still another problem was time lost because of people > failing to properly document changes or failing to document bug fixes. I > could go on but I think you probably get the idea. > > Obviously this project started off on the wrong foot, but I am sure some > elements of it exist in many other projects to some degree. My point is > that the methodology used won't make much difference if certain basic > requirements are not met. A team consisting of people who posses > appropriate experience, who are able to show selfless dedication, and > who know when it is appropriate to consult with a domain expert, are > going to be successful regardless of the approach or technique used. I regard the project I just finished as a really good example of how to do such a project right. The project was a 3-D rotational steering tool (directional drilling control for oil wells). The company had a tool and it mostly worked, but the firmware was a disaster - if you breathed on it, it broke. Worse yet, the fellow who wrote it (I can't really say anyone "designed" it) is an information hoarder who always appears cooperative while providing as little real information as possible. The company brought me on contract with the mandate to do whatever it took to get the thing working and maintainable. Aside from the technical challenge, the company is typical of many in the oil field services industry in that firmware engineering takes a back seat to the mechanical engineers and field personnel. I.e. it's in the electronics and firmware business because it has to be, but that's not it's business. Since they wanted it fixed, I started out with an effort improve their processes and procedures. Using software metrics (which no one had ever heard of), I showed them why the code was unreliable. Judged by either lines of code or cyclomatic complexity, the code base was a disaster! The most egregious example was one function which consisted of 2359 lines (1235 code lines) with a complexity of 190. I told them that most shops using complexity metrics require justification for single function complexities above 7. The next thing I did was introduce them to the wonderful world of software version control. Their backup and maintenance activities were chaotic, at best, and they'd been known to have to rewrite firmware that had gotten lost. I also wrote up a brief document to formalize coding standards. Next, they expected me to start writing code. Instead, I got everyone together who knew what the existing tool did and what they wanted it to do and we hammered out a functional spec. It was a new experience for them, but they learned from it that not everyone's perceptions and expectations are the same. With the functional spec complete, I began the design. What I knew, and they didn't figure out until much later, was that the new "firmware" included a fairly complete cooperative multitasking OS. Using an existing off the shelf RTOS would have been problematic. The performance requirements were *very* tight - lots of FP math (the 68332 doesn't have an FPU) and the devices we had to use because of the downhole environment (i.e. hot!) limited us to byte-wide memory access. I wasn't sure that the overhead of an existing RTOS would work, so I didn't push for it. As I mentioned before, the other programmer assigned to work with me on it initially didn't believe any of the design would work. I knew it would because I'd used a lots of similar code several years ago writing modem firmware for Compaq, also using a 68332. To make a long story short, I finished up this past week. Overall, our schedule performance exceeded expectations. There was grumbling at first because they didn't understand my insistence on having a solid design before I began coding. By now, they realize that the time spent up front on specification and design paid benefits at the end of the project. Every aspect of performance of the new firmware is significantly better than the old firmware (which I expected, but they never even asked for), and maintenance takes hours instead of weeks. At the tail end of the project, I captured all my design notes into a detailed design/implementation spec which can serve as a guide to whoever has to maintain the system in the future. Aside from this specific success story, now all the other firmware groups there are making use of the version control system and the management has a new respect for the use of formal specification as well as doing real design rather than hacking code together. When I arrived, all their firmware development activities were at CMM level 1. Now they're mostly between levels 3 and 4, with my project a solid 4. What they'll do in the future, I can't say. But at least they now know there's a better way than what they did before. ------------------------------------------------------------- Consulting: http://www.MicroFirm.biz/ Web graphics development: http://Image-Magicians.com/ Software archives: http://snippets.snippets.org/ c.snippets.org/ cpp.snippets.org/ java.snippets.org/ d.snippets.org/ python.snippets.org/ perl.snippets.org/ dos.snippets.org/ embedded.snippets.org/ apps.snippets.org/ Audio and loudspeaker design: http://LDSG.snippets.org/ http://www.diyspeakers.net/ --- BBBS/LiI v4.01 Flag-5* Origin: Prism's_Point (1:261/38.1) SEEN-BY: 633/267 270 @PATH: 261/38 123/500 106/2000 633/267 |
|
| SOURCE: echomail via fidonet.ozzmosis.com | |
Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.