Wednesday, October 24, 2012
Top 10 Rush Songs
1. The Camera Eye
2. Xanadu
3. Heresy
4. Circumstances
5. Bravado
6. The Larger Bowl
7. Test For Echo
8. BU2B
9. Vital Signs
10. Between Sun & Moon
11. Entre Nous
12. Natural Science
Yeah, that's 12. I didn't have the heart two cut two songs out of this list.
As a present for getting my master's degree, Holly got me front-row tickets to Rush in Pittsburgh in 2010. Here we are, enjoying the moment:
Saturday, September 29, 2012
My Camaro Issue
21-Jan-2013
~9:45: Picked up the new 2013 Camaro today and left my old 2012 at Thayer.
I've had my 2012 Camaro for four months now. The steering wheel shakes when I drive it. The shaking goes away after a few miles. Until recently. Now the shaking will happen for a few miles, then stop, then start again after a few more miles. Below are the overview and specifics regarding my issue. The bottom line is that GM won't fix it, and I don't think that's right.
I've classified the shaking into three categories:
1 - Barely noticeable. You really have to look to see the shaking.
2 - Obvious, but not bad.
3 - Bad. This is the level that makes me nervous.
Note: I only added these categories on 12-Oct. I wish I would have done that from the beginning, but I didn't. When the shaking occurs, 80% of the time it's level 2. I'm not sure that I'd have a problem if it only got as bad as level 2, but level 3 makes me nervous. I would guess that level 3 represents 5-10% of the total shaking time.
Overview
More Details
The car has about 2500 miles on it.
25-Sep-2012: Person1 (dealer) just called. My notes:
1-Oct-2012 (~8:30 AM):
My steering wheel shook for just about the entire 17-mile drive to work this morning. Somewhere in the middle of my drive the shaking stopped for a mile or two. Then it came back. So the shaking is no longer going away after a few miles.
1-Oct-2012 (~5:45 PM):
This is getting comical. A day or two ago I posted my problem online at Chevy's web site. I just got an email with the subject "Robert, here's the Chevrolet information you requested." It's all about shopping for a new car and how great their products are. Obviously someone didn't bother to read my complaint.
1-Oct-2012 (~6:00 PM):
Talk about comical... Josh called and left me a voice message again. He again left Desiree's number. I called him back (512-386-0692) and actually spoke with him this time. I started by asking him why he would leave me Desiree's number when I was looking to speak with him. He said that Desiree handles my case and that I should speak with her regarding issues. I explained that I already spoke with her, and I was looking to talk to Josh now. So how does that help to get her number again? He said something like: "Mr. Horn, how can I help you?" I said that I'd like him to answer my question first. He replied that he left Desiree's number because she could forward me to Josh. I told him that's different than the first answer he gave me. He again asked how he could help me. I told him that I wanted him to answer my question because I'd like to know if he's going to be honest with me. Anyway, we eventually got to the issue and he stuck by the old line of that's just how the car is and there is nothing they can do. I asked for his manager and he said they don't provide that information because it's proprietary. So I then asked: "My only recourse at this time is to take legal action?" He said if that's what I want to do, yes. I told him that my car is now worse than before. The shaking is not going away after a few miles. I explained how it shook the whole ride to work this morning. He said I'd need to take it to the dealer again. He asked if Desiree should call me to see how it's going, and I told him no because they haven't been helpful... What's the point?
2-Oct-2012
Called Person1 at Thayer Chevrolet in Bowling Green. I explained that the steering wheel shook for my entire 17-mile ride to work (except for roughly a mile or two in the middle of the ride when it didn't shake). Anyway, he said that's different than before, so bring the car back in so they can test some things. Side note: Person1 has been super nice and sincere throughout this whole process.
3-Oct-2012 - VINDICATION!
I took the car into Thayer Chevrolet at 8:00 AM. At about 1:30 PM Person1 called and explained that the right front tire is bad. He said all of the tires were balanced, but there was a belt infrastructure compromise in the right front tire. He said it looks like a build quality issue because the road force variation was high and the tire doesn't react well to load. They are going to put on a new right-front tire and he'll call me with an update later. He also wants to drive it in the morning as a test, so he'll keep it overnight.
4-Oct-2012 - Picked Up Car
I picked up my car. The steering wheel shook as I drove away, however, I only had about a two-mile drive home. I drove my son to baseball practice (11 miles) and it wasn't bad.
5-Oct-2012 - Not Again!
Steering wheel shook for the first six miles of my drive to work today. Then, it didn't shake again until about one mile before I got to work (my total drive is ~17 miles). When I left work, it was terrible. The shaking was bad, and it was coming and going. I had my cruise control on, going 61 MPH, and the steering wheel would shake badly. Then, after about a quarter of a mile, the steering wheel stopped shaking. Then, about a quarter of a mile after that, it started shaking again. I called and left a message for Person1.
Person1 called me back and I explained the situation. He offered to contact some people to see what else he could do, but he said it may be tough to do much more due to the bulletin on the tires. He said the car would need to exhibit these problems after driving more than 10 miles so that the tires got some heat in them. I told him I would drive it more this weekend and call him on Monday.
6-Oct-2012 - Thoughts...
12:15 AM: I'm getting pretty frustrated. I'm having a hard time sleeping tonight because I keep thinking about this. If the issue was a mild shake and it always went away after a couple of miles, I may be able to just live with that. But it's a severe shake (at times) and it comes and goes. Sometimes there is very little shaking for days on end, then sometimes it's terrible for a day. I want GM to prove to me that the problem is the tires, but they won't put a different brand of tires on my car.
My dad retired from GM, and I've owned many GM cars. Are they going to lose a customer because of this? So tiring.
12:33 AM: I just emailed Jaret at the dealership where I bought the car:
-- BEGIN EMAIL --
Jaret,
-- END EMAIL --
12:55 AM: I got an email from GM asking me to complete an online satisfaction survey. I completed it and included this:
"I couldn't be happier with Person1. He's been respectful and he seems to sincerely care about the problem I'm having. However, I'm frustrated to the point of considering legal action because the problem still isn't fixed. I simply want the steering wheel to stop shaking. I don't think that's too much to ask after paying $40K for my car. The details of the problems are in my blog: http://inaspiralarray.blogspot.com/2012/09/my-camaro-issue.html."
Possible options remaining:
* Call/email the dealer where I bought the car and ask them to put different tires on the car. Also ask for anything else than can do. Anything...
* Call a local TV station and see if they'll listen to my story.
* Call the Better Business Bureau and complain.
* Call a tire store and see if they'll let me drive on used tires for a week. If the shaking still happens, that means the problem wasn't the tires after all.
* Contact an attorney and sue GM.
* Something else? Thinking...
6-Oct-2012 - Belle Tire
12:05 PM: Called Belle Tire in Rossford and spoke with Drew. He explained that the issue might be the wheel and not the tire. If I have after-market wheels, they may not fit properly on the car. I sent him a picture of the wheel. Drew said I don't have after-market wheels, so that's probably not the issue. He said to bring my car to Belle Tire on Monday. They're going to check it out for me. If they can't find anything, maybe I'll go to a non-dealer mechanic next.
8-Oct-2012 - Belle Tire Balanced Tires
Belle Tire balanced my tires. Both driver side tires out of balance. Front off by 1.25 ounces. Rear off by 0.75 ounces. He said you'll feel anything over .25 ounces. Driver rear tire has a hop (elongated, egg-shaped) and that's why I feel it in the seat when driving. He said for a car like this the dealer should replace the rear tire. On my drive home, there was no steering wheel shaking for the first 10 miles, then after 10 miles it would come and go for the remaining 6 (or so) miles. The shaking at least wasn't the bad shaking. I guess we'll see over the next couple of days. Something is wrong, and I want to know what it is.
10-Oct-2012
~11:45: I also called Person1 at Thayer. I told him the Belle Tire results. He said he isn't sure what to say, but Thayer has a $15K benchmark wheel balancer. He is not sure what to do at this point, so he is going to turn this over to his GM rep, and someone should call me. I also told him about the elongated rear tire and the hop. He again suggested that I have the original dealer put different wheels or tires on my car. I told him I sent an email to the original dealer last Saturday and haven't heard anything. I can try again. Person1 also said that he doesn't want his name on this blog, so he is now Person1. He also expressed frustration that I would only "probably" recommend his dealership on the survey. And he said that he was someone that was in my corner. Now there isn't much more he can do but turn it over to his rep. I apologized for using his name, even though I didn't see what the issue was, but I don't have a problem using Person1 as his name. I also told him that I said very nice things about him in the survey and that "probably" wasn't so bad, especially considering that the problem still exists.
5-Nov-2012
11:35: Why has it been three weeks with no activity? The person that has taken my case was on vacation for two weeks. Then he had to cancel last week because he had the flu. It happens. No worries. He was supposed to be here at 11:15 today. It's 11:35. Not sure if he forgot... Just left him a message. Ha. My bad. He just called. We were supposed to meet at Thayer. Going now...
13:00: Just got back from Thayer. Went on a test drive with a GM rep from Toledo. We drove about 10 miles and the level-3 shaking occurred. It was actually intermittent as well. The steering wheel would be completely smooth for a good 1/4 mile, then it would shake badly. Then it went smooth. Then it was bad again. It finally happened in front of someone. Anyway, I left my car at Thayer and they're going to check it out again. It also pulled left off and on.
6-Nov-2012
13:40: Person1 called with an update. Alignment slightly off in front and back, not enough to cause pulling. Three of the four tires were out of balance. One rear and one front had high road force variation. He said other tires are now available, so they will replace all four tires. BF Goodrich Comp 2s are now available through GM tire program. Not sure how long this has been the case. Person1 said my car probably won't be ready until tomorrow or Thursday.
7-Nov-2012
16:30: Returned Person1's call. He said they just finished and the test drive was flawless. He said it was awesome and it's amazing what we can do with a good set of tires. There was genuine excitement in his voice, so I'm hopeful that this is really finally fixed. I'm going to get the car tomorrow morning.
8-Nov-2012
10:00: Just got back from Thayer after picking up my car. Person1 said the road force on the back was only 5 and the front tires weren't more than 9. I took it for a 10-mile test drive. The shaking still occurred but it was mild (level 2) and it was intermittent. If it never gets worse than this, I'm fine with that. There was definite improvement in that it felt smoother overall, especially not feeling the vibration in the seat due to the new back tires. Person1 said to get some miles on the tires and they'll be fine. I hope I can get a few more weeks on these new tires before changing to winter tires. I want to see that they don't get worse.
Note: Person2 is Person1's contact in Toledo.
13-Nov-2012
~16:30: Person1 called to see how it was going. I told him the problem is still occurring. It's not any better Just after I hung up, Person2 emailed me asking how it was going. This is my reply: "Interesting timing. I just now hung up the phone with Person1. I told him the issue was still happening. He said he wasn't sure what to do at this point, and that he can talk to you about it. He said it was smooth when he drove it. I explained that it is sometimes smooth for me, too. I also explained that if my steering wheel vibrated like yours did, and/or only had mild shaking, I would be fine with that. The issue is the level three shaking. That isn't right. Person1 says that the tires would be the only reason for this behavior. I was hoping it could possibly be something else because this isn't right. I'm tired, Person2. I hate bothering you guys, but I want this to be right. I'm not sure what to do."
16-Nov-2012
~9:00: Just got this email: Hi Bob. Is it still happening around 60 MPH? Are you allowing the car to warm up for 20 minutes or so prior to analyzing the vibration? Smooth road surface? We have 2 options at this point. 1) I can send your vehicle to Milford to have engineering take a look at it to see if they can find something out of spec, or 2) I can buy the vehicle back and trade you into another Chevy vehicle. Please let me know what you would like to do. Thanks. -Person2
5-Dec-2012
~12:00: Just sent email to Thayer Chevrolet to go ahead with the order of the 2013 Camaro as a replacement.
21-Jan-2013
~9:45: Picked up the new 2013 Camaro today and left my old 2012 at Thayer. The Hurst short throw shifter wasn't installed. Also, the new car wouldn't move out of 1st gear. After I tried it, and two other Thayer employees, a third one finally just took off quickly and that did it. He said the car was just washed and the ice was frozen on the caliper. Had to break it. On my drive to work, the steering wheel didn't shake at all. NICE. FINALLY. I have a dealer plate on the car, so I 'll need to go back for paperwork, the shifter, and have my winter tires put on the new car.
Driving Log
Roads: Brim, Union Hill, and US 25 are smooth and paved.
8-Oct: On my drive home from Belle Tire, there was no steering wheel shaking for the first 10 miles, then after 10 miles it would come and go for the remaining 6 (or so) miles. The shaking at least wasn't the bad shaking.
10-Oct:
Drive to work. 45 degrees outside. Wheel started shaking about 1/2 mile into my drive, at 47 MPH, on Brim Rd. It shook for about 1/4 mile then stopped. Two miles into the drive, it started shaking again at 50 MPH (Union Hill Rd). After three miles, it started shaking at 61 MPH (US 25). The shaking was coming and going. For miles ~6-17 (freeway) there was very little or no shaking.
Drive home from work: ~45 degrees again. No shake for the first 2 miles while going under 40 MPH. When I got onto 795 the wheel started shaking (badly) at 50 MPH. I had to stop a few seconds after it started shaking. When I started again, it started shaking around 60 MPH. For the remaining ride home (17 miles total) the shaking would come and go (and the shaking was a medium shake, not as bad as what happened earlier). It would usually last for a few seconds, go away for a while, then happen again for a few more seconds. All the roads were paved and generally smooth. Oh, and the car kept wanting to pull left for the entire ride home. Not sure what that was about. Wind? Some new problem?
11-Oct:
Drive to work. 35 degrees outside. No shake for first two miles. Still no shake when I put it in cruise at 61 MPH. About 2.5 miles in, while still in cruise at 61 MPH, the wheel started shaking. It only lasted for about 1/4 mile then stopped. While still in cruise at 61 MPH, the shaking happened again about a mile later. This continued until about 6 miles in when I got on the freeway. No shaking on the freeway (8 miles), although the car was pulling left again (but not as badly as yesterday). For the last 3 miles the shaking only happened twice, and only briefly.
After work driving: ~60 degrees outside. I drove about 55 miles tonight and there was almost no shaking. Maybe 40 miles of that was freeway driving. Maybe two or three times there was a barely-visible shake, but that was it.
After work driving: 52 degrees outside. No shaking below 50 MPH. However, almost every time I stopped and started, the wheel had a level 2 shake at about 55 MPH. That was about five different times, and all throughout my 17-mile ride home. It also shook at 61 MPH, off and on while cruising. And the same happened at 72 MPH.
12-Oct:
Drive to work. 42 degrees. Level 2 shaking off and on for the first six miles again. Then, at the 13-mile mark, level 2 shaking again, but only for a few seconds. No shaking for the final four miles.
13- and 14-Oct:
Drove ~100 miles to a friend's house over the weekend. The temprature was in the 40s on the way there, and in the 50s on the way home. On both occasions there was no shaking below 50 MPH. On the way there, level 2 shaking occurred around the ~55-mile mark, the 65-mile mark and the 75-mile mark. On the way back, level 2 shaking occurred 33, 72, and 93 miles into the drive. Each time the shaking would come and go. Also, the vehicle is now pulling to the left more and more often. Sometimes the pull is strong, sometimes it's weak, and sometimes it doesn't pull at all. It doesn't seem to coincide with the shaking. I also pushed in the clutch while the shaking was happening, but that didn't help.
16-Oct:
~61 degrees outside. Today the shaking was bad. There was level-3 shaking at 55 MPH, and that happened four different times. The shaking never really occurs at lower speeds anymore. Oh, and the car is still pulling left.
Thursday, May 17, 2012
Why I Left RavenDB
It's important to note that I think RavenDB is great for certain scenarios, or for people who don't mind the issues I state below. For me, it just wasn't the right fit. Here's why:
1. The object model is supposed to match the document model in the database. The document model is not how I'm used to dealing with domain entities, and I don’t like that the persistence layer creeps into the domain layer.
2. RavenDB markets itself as “safe by default.” I once thought that was cool, but now I find it limiting. RavenDB only returns 128 documents (rows) by default. One actually has to make an explicit change to get more rows than that.
3. If one makes the change described in point 2, and one wants more than 1024 rows, then another change has to be made on the server side.
4. It is possible to use RavenDB and keep your domain model pure, but that goes directly against the design Zen of RavenDB. And then you have to map documents to your domain model, eliminating one of the main reasons for using it in the first place.
5. RavenDB markets itself as “eventually consistent.” I once thought that was interesting, but now I find it limiting. I don’t want my data to be consistent eventually. I want it to be consistent always.
6. RavenDB’s performance didn't do so well during a prototype.
Raven did have one, big, nice positive: no DB admin work. One doesn’t need to create tables, set foreign keys, etc… It’s a cool feeling to be working with an object variable and just save it. Saves time.
Saturday, March 17, 2012
Keeping a Domain Model Pure with RavenDB
Based on a few months of using these tools, I demonstrate here how I was able to keep my domain model relatively pure and still use RavenDB. What I mean by "pure" is that I don't want traces of the persistence layer manifesting themselves in the domain model. And I want properties, that are natural for a class, to exist in that class. For example, a Team class should have a List<Player> property, not just a list of Player IDs, or parts of the Player class represented again in the Team class.
For this post, we'll be looking at Presto (http://presto.codeplex.com/) source code, and how it kept a somewhat pure domain model while using RavenDB. We'll be working with these two domain classes: Application and CustomVariableGroup. An Application is simply an app, such as an app to store music, or an app to record employee information for your company. A CustomVariableGroup is simply a container for CustomVariables. Defining a CustomVariable is unnecessary here. It's simply a POCO, used as a property on an Application class.
Let's start by showing how we create a document store. Here is the actual property:
And here is the method that sets it:
Now let's show the two domain classes. Here is Application:
The property that has the comment "// For RavenDB" after it, exists so that we know the IDs of other entities that belong to this entity. This is really the entire point of what we're doing here. We store the IDs of the entities within this class, so they can be populated from a RavenDB call when it's time to retrieve our entities from the DB. It is the responsibility of the Raven data layer to manage this.
This is absolutely Raven-specific. We could have defined a partial class to hold this Raven-specific property, and kept this class file completely pure, but I didn't want to take it that far.
Also notice that we have a property CustomVariableGroups. This is what I mean about maintaining a pure domain model. With RavenDB, there are some guidelines that, since it's a document database, we don't store full documents/entities in another entity. Instead, you store only some properties of other entities in your current entity. But, I'm getting ahead of myself here.
Also notice the JsonIgnore attribute on the CustomVariableGroups property. RavenDB will ignore this property when saving to the database. Raven, like db4o, will persist POCO properties. However, unlike db4o, that persisted property is frozen in state, and the *instance* of that property belongs to that class. For example, if changes are made to a CustomVariableGroup in the DB, those changes *will not* be reflected when retrieving our class. This is why we store the IDs; so that we can get the latest version of our property, even if it has been changed by someone, or something, else.
Let's show our CustomVariableGroup class:
To finish showing our entities, let's show the base class. This *is* Raven-specific, but it's a base class for exactly that purpose, and the derived classes don't show this information in their class files.
The Etag property is out of the scope of this blog.
If you've been able to stay with me so far, we're almost done. Now we need to show how the Raven data layer manages these properties.
Here is how we save an Application:
What happens here is that we loop through all of the CustomVariableGroups in the Application, and add their IDs to the CustomVariableGroupIds property. When the entity gets saved, the IDs will get saved, and not the actual POCOs. This way, when we load an Application from the DB, we can retrieve the latest instance of the POCOs by the IDs:
The important part here is the Include() line. That instructs RavenDB to retrieve, in the same session, the CustomVariableGroups with those IDs. Because we've done that, the code to call HydrateApplication can then add the appropriate CustomVariableGroups to each Application object, all on the same session:
That's it. Now that that's done, each Application has the latest CustomVariableGroup associated with it. Those CustomVariableGroups can change over time, yet we still get the latest, and correct, one using this approach.
Monday, November 3, 2008
Is the IT Industry Living with a Myth?
Introduction
There is no such thing as a late software project. Why? Because a software project takes as long as it takes and you don’t know that amount of time until it’s over. Guessing how long it will take at the beginning, and then calling your project early, on time, or late, based on that guess is like being forced to predict how long it will take you to drive home from work when driving through rush hour tonight. Your drive will take as long as it takes. When you’re home, you can analyze how good your guess was, but you’re not late. You’ve never driven home on that day, during that time, before. How could you possibly know if there would be an accident? What if you guessed 45 minutes and got there in 25? Were you sand-bagging? The next time you have to guess what time you’ll be home, you’ll be expected to say 25 minutes. Why not? That’s how long it took last time. Now the next time it takes you 70 minutes. You’re late! No, you’re not. Your guess was wrong; two completely different things.
An estimate is basically an educated guess. When management decides to use an estimate as a deadline, they’re hurting themselves. Why? Take the rush hour analogy from above. What if you estimated that it would take 30 minutes to get home? About 20 minutes into your drive you realize there is no way you’re going to make it; you’re at least another 20 minutes away. You have two choices: you can hurry through traffic by speeding, driving on the shoulder, ignoring red lights, etc... Or you can drive safely and get home when you get home. The first option is the development equivalent of rushing through your coding efforts, cutting corners, and working when you’re tired because you’re putting in 14-hour days. You’ll get there on time, but will that be a product you can depend on?
This is the basis for the theme of this paper. I believe that IT (Information Technology) is living with the myth that it can predict the future, that it can predict how long it will take to get home from work tonight. The intent of this paper is to make it clear that predicting how long projects will take, especially projects that take months or years, is virtually impossible. A side effect of hitting mythical deadlines is that it’s bad for business. We’ll discuss that too.
I also intend to present the other side of the story by presenting research that contradicts what I believe, and by discussing this topic with project managers that don’t agree with my beliefs.
Beliefs and Support
The nature of dealing with computers doesn’t allow for accurate estimates. For example, let’s say you give each of your three developers on your small project team a new monitor to use. The first two plug the monitor in and start using it within ten minutes. How long will it take the third person to do it? Ten minutes, right? Be careful. It actually took the third person 30 man-minutes to install his monitor. Was he incompetent? Was he lazy? Let’s examine this simple real-life story that happened to me to see what really happened...
I was given a second monitor to use with my computer at work recently. If we treated this as a project (an admittedly simple one), we would probably estimate the time at one resource and about 10 minutes. After all, what had to be done? Attach the monitor, adjust display settings and away you go. Here's what actually happened:
1. Attached new monitor to computer. No signal.
2. Think for a minute; new monitor worked with previous computer, same model. The dongle worked with the previous computer too.
3. Decided that all connections worked, so rebooted the computer. Still didn't work.
4. Discussed issue with co-worker who was walking by. Decided that the video card might be bad, so...
5. Open both computers to swap video cards. Upon opening my computer, discovered that the video card wasn't seated properly.
6. Reseated video card and put both computers back together.
7. Started computer and monitors were recognized.
8. Adjusted display settings to my preference.
The original estimate was one person and 10 minutes. The actual results were two people, and 30 minutes (20 minutes of one person’s time and 10 minutes of a co-workers time).
Projects don't get much smaller and simpler than this, yet it went over the "deadline" by 200%. By most accounts, any project that takes 200% longer than anticipated would be considered a failure. If something this simple and “predictable” can go this far off track, imagine accurately estimating projects that take months or years.
This is dealing with computers. This is part of the reason why it's so hard to predict how long projects will take. Information systems projects, of course, involve computers, a distinct characteristic that has more effect than initially might be apparent. (Olson, 2004)
So why is IT burdened with this myth anyway? Part of the reason is that IT is still in its relative infancy compared to the history of other departments. Since other departments, such as accounting, operations, etc..., can usually predict how long it will take to get their work done, they naturally feel this belief should carry over to estimating software projects. The problem with this view is that those other departments are estimating future work that is very similar to, or almost exactly like the work they’ve done in the past. With software engineering projects, each project is something brand new that’s never been done before. If it had been done, we should just buy it, not build it.
I need to make something clear before going any further. A project can be completed by a certain date. Absolutely it can. If your business absolutely must have a product to market by March 31 or miss out on an opportunity entirely, then you can have your product to market by then. And you may even have the quality you wanted and be within your projected budget. Ah, but what if it’s March 15 and you realize you have two more months of work to do yet? Will you be “late?” Not necessarily. You can certainly sacrifice some quality or spend some more money to help complete it on time. The point here is, if you’re rushing to meet a deadline, and you have to hit it, you’re most likely going to lose some features, some quality, or be over budget. Hurrying always makes your product worse. People under time pressure don’t work better; they just work faster. (DeMarco & Lister, 1999)
From "Nestle's ERP Odyssey," from the 15-May-2002 issue of CIO Magazine: "Nestle
Estimates are good. They’re necessary because they give the business at least some idea of the timeframe that they’re dealing with. It only turns into a problem when the estimate is treated as a deadline. An estimate is just that; it’s an ESTIMATE. Software estimations would be fine, if they were actually accepted as “estimations” rather than concrete expressions of an end date. (Staddon, 2007)
Can meeting a deadline be bad, even if you didn’t have to hurry? And even if you’re going to meet all of your features, hit your quality standard, and be within budget? Yes, that can still be bad. Why? Because work expands to fill the time allocated for it, now known as Parkinson’s law. (DeMarco & Lister, 1999) This phenomenon means that people will tend to use all the time they have, even if they could have been done earlier.
So what is a business supposed to do? Could they do something crazy like not mandate a deadline? Believe it or not, a study was conducted that showed that projects on which the boss applied no schedule pressure whatsoever (“Just wake me up when you’re done.”) had the highest productivity of all. (DeMarco & Lister, 1999) So how do you hold your team accountable then? If there’s no deadline, will they take forever and still not be done? This is where assembling the right team comes into play. If you’re afraid the employee is hiding behind the curtain surfing the net or playing Doom, well, there are far more severe problems than just productivity issues. Without trust – mutual trust – any engineering department is in trouble. (DeMarco & Lister, 1999) And by the way, project and functional managers are still involved. They’re still monitoring progress, analyzing the amount of work done, etc... This approach doesn’t mean you’re throwing projects over the wall and ignoring them until they’re done.
Counter Beliefs
I had quite a few lengthy discussions about this topic with a project manager (Mike) from a $1.3-billion company.
Mike said that it is possible to accurately estimate a project. You add the appropriate slack time and state your variance. For example, you can be within 50% of your estimate for a two-year project involving a team of six. You can be on time if you time-box. (Time-boxing is a concept whereby you finish by the deadline no matter what. If features are missing, then they’re missing; at least you’re on time.)
Mike also stated that accuracy will vary depending on the type of project. For example, you might be working with a team that is working on the same project for years. You might be continually adding new functionality to it. Your estimates for this type of work will be more accurate than if you were starting a brand new project, with a brand new team, using new technology.
A web site (Green, 2006) claims to have a “proven software project estimation method that produces reasonably accurate results...” With this method, you assign low, medium, or high risk to each task. The low risk has an allowance of 10%, meaning that it would be normal for that task to exceed its estimated completion date by 10%. A medium risk is assigned an allowance of 50%, and a high risk is assigned an allowance of 150%. There is nothing wrong with this method for producing an estimate. It just goes to show, however, that this method treats being off by 150% as being accurate.
Thoughts About Counter Beliefs
Regarding Mike’s points from above, I feel what he says proves my point. If you can accurately predict how long a project takes, why is slack time necessary? And stating your variance? Why is a variance necessary? Because it’s an ESTIMATE. And 50% of a two-year project is one year. So that means you’ll finish anywhere from 12 months to 36 months. That’s not what I’d call being able to predict how long a project will take. And if you need to time-box to hit your deadline, then you haven’t really accurately predicted how long it will take to get all of the features completed.
For people that believe that you can predict when projects will be done, and that you should force your team to hit that deadline, they can point to analyzing the risk and allocating time for the unknown. However, successful risk analysis depends on the personal experience of the analyst, as well as access to the project plan, and historical data. (Olson, 2004)
Two points are important about that last statement. First, analyst experience varies. This means that successful risk analysis changes depending on who is doing it. This further means that some will be more “correct” than others. So you can analyze risk, but you can’t predict the level of risk that will actually happen.
Second, successful risk analysis depends on historical data. Think about what that means for a second. Read that again. Successful risk analysis depends on historical data. You don’t always have historical data! Actually, many times you don’t. What if you’re developing a brand new project with new personnel and new technology? There is no historical data, and therefore nothing to compare it to.
Further Support and Advice
A decent approach that I’ve seen is to add 40% to every project because I have experienced that many software engineering projects average that amount of unknown. You have to be careful though; that’s an average. That doesn’t mean that your project will have 40% of unknown issues. One project could contain 10% and the next could be 70%. That’s the hard part for traditional managers to accept. “You’re telling me that you’re going to add 40% for the unknown?” Yep. Not only am I telling you that, but be prepared for that unknown to be even higher when all is said and done.
This might sound like I’m being insensitive here. Quite the contrary; if this is reality, what could bring management and IT together more than both entities understanding reality and being on the same page?
Now how can management plan the business around such wild changes in when projects might be done? They have a couple of choices. They can hit the deadline and sacrifice budget, features, or quality. Or they can plan for a project to take three times longer than expected and be willing to wait it out. After all, some projects actually aren’t so time critical. If you’re replacing an internal system that already works, but it costs a lot of money to support and it’s nearing its capacity, you have the luxury of using that old system until you get the new system completely ready to use.
The incompleteness and inconsistencies of our ideas become clear only during implementation. (Brooks, 1995)
Observe that for the programmer, as for the chef, the urgency of the patron may govern the scheduled completion of the task, but it can not govern the actual completion. An omelette, promised in two minutes, may appear to be progressing nicely. But when it has not set in two minutes, the customer has two choices – wait or eat it raw. Software customers have had the same choices. (Brooks, 1995)
The cook has another choice; he can turn up the heat. The result is often an omelette nothing can save – burned in one part, raw in another. (Brooks, 1995)
Why are estimates many times overly-optimistic? There are many reasons: pressure from management, being optimistic by nature, not wanting to appear incompetent, etc... An example of not wanting to appear incompetent might be something like this: If you ask a developer how long it will take to create this simple report (see Figure 1), and you’re his boss, you might hear something like “eight hours.” A typical scenario might have the manager questioning this estimate and the programmer giving in and reducing it to something like four hours. Why? What changed between the time the first estimate was given and the second, besides the apparent look of disappointment on the manager’s face? Little did the manager realize that the original estimate of eight hours was actually optimistic. The programmer really thought it was going to take 16 hours, but he thought that would appear too long in his manager’s eyes, so he said eight, and now it’s down to four!
(Figure 1 – A “Simple” Report)
So why would this take so long? First, to present the data correctly, a thorough understanding of the data structures is necessary. That takes time, and it could take a lot of time if the data structure is complex. Second more than one approach to the solution might be possible, and sometimes only through trial and error will you know which one is best. Third, what appears like an amazingly simple report to the user actually contains a quite-complicated SQL query statement to produce it. See Appendix A for the actual code used to produce this report.
The old success criteria of meeting outcome, cost, and schedule constraints are no longer adequate. (Cohen & Graham, 2001)
In the past the project manager was concerned mainly with the technical risk and so concentrated on creating the outcome. This resulted in the narrow orientation project managers were often given and the focus on the triple constraints of outcome, cost, and duration. Those commissioning the project saw this approach as giving them control. They were concerned with the marketing risk and adding value to the company. They apparently felt that if a business could get specific things done at a fixed cost and time, the value would be there and the market would respond. This orientation of working within constraints led to many bad practices by both project managers and upper managers. In particular many new possibilities that arose during the execution of a project were often ignored because they were not in the budget nor in the specifications nor in the schedule. (Cohen & Graham, 2001)
It’s been my experience that actual programming time is less than most people think. When I was managing a team of developers on a project, I came into the job during the middle of the project. I was able to show that the developers were spending their time on the project at a rate much less than what management thought was happening. Management thought that the project team was working more than 90% on the project. After tracking time for weeks, the most any developer was working on the project was 75%, and one of the developers was only working on the project 25% of his time. Observe this excerpt from The Mythical Man-Month:
Charles Portman, manager of ICL’s Software Division, Computer Equipment Organization (Northwest) at
He found his programming teams missing schedules by about one half – each job was taking approximately twice as long as estimated. The estimates were very careful, done by experienced teams estimating man-hours for several hundred subtasks on a Pert chart. When the slippage pattern appeared, he asked them to keep careful daily logs of time usage. These showed that the estimating error could be entirely accounted for by the fact that his teams were only realizing 50 percent of the working week as actual programming and debugging time. Machine downtime, higher-priority short unrelated jobs, meetings, paperwork, company business, sickness, personal time, etc. accounted for the rest. In short, the estimates made an unrealistic assumption about the number of technical work hours per man-year. My own experience quite confirms his conclusion. (Brooks, 1995)
The above is another reason for estimates generally being bad; management sometimes simply does not want to believe that their team isn’t working as much as they thought.
Another reason deadlines are bad for the business as a whole is that it causes the development team to leave behind “broken windows.” Observe this excerpt from The Pragmatic Programmer (Hunt & Thomas, 2000):
In inner cities, some buildings are beautiful and clean, while others are rotting hulks. Why? Researchers in the field of crime and urban decay discovered a fascinating trigger mechanism, one that very quickly turns a clean, intact, inhabited building into a smashed and abandoned derelict.
A broken window.
One broken window, left unrepaired for any substantial length of time, instills in the inhabitants of the building a sense of abandonment – a sense that the powers that be don’t care about the building. So another window gets broken. People start littering. Graffiti appears. Serious structural damage begins. In a relatively short space of time, the building becomes damaged beyond the owner’s desire to fix it, and the sense of abandonment becomes reality.
The “Broken Window Theory” has inspired police departments in
Don’t leave “broken windows” (bad designs, wrong decisions, or poor code) unrepaired. Fix each one as soon as it is discovered. If there is insufficient time to fix it properly, then board it up. Perhaps you can comment out the offending code, or display a “Not Implemented” message, or substitute dummy data instead. Take some action to prevent further damage and to show that you’re on top of the situation.
We’ve seen clean, functional systems deteriorate pretty quickly once windows start breaking. There are other factors that can contribute to software rot, and we’ll touch on some of them elsewhere, but neglect accelerates the rot faster than any other factor.
You may be thinking that no one has the time to go around cleaning up all the broken glass of a project. If you continue to think like that, then you better plan on getting a dumpster, or moving to another neighborhood. Don’t let entropy win.
It’s exactly this type of doing-it-right style that loses out when deadlines are enforced.
The Chaos Report is the first survey made by the Standish Group. This report is the landmark study of IT project failure. It is cited by everybody writing a paper or making a presentation where a reference is made of IT project failure. (IT Cortex)
The respondents to the Standish Group survey were IT executive managers. The sample includes large, medium, and small companies across major industry segments: banking, securities, manufacturing, retail, wholesale, heath care, insurance, services, and local, state, and federal organizations. The total sample size was 365 respondents representing 8,380 applications. In addition, The Standish Group conducted focus groups and personal interviews to provide qualitative context for the survey results. (IT Cortex)
On the success side, the average is only 16.2% for software projects that are completed on-time and on-budget. (IT Cortex)
Only 16.2% of 8,380 applications were on time and on budget, and yet we continue to ignore the simple, obvious truth: We can not predict how long a software project will take.
Summary
Project estimation is good and it’s necessary. Turning estimates into deadlines is bad. Accurately predicting how long a project will take, especially a new project, with a new team and new technology, is virtually impossible.
IT is living with a myth that it can predict how long it will take to complete projects. Being burdened with this myth is bad for business because of the negative side effects caused by being forced to hit a deadline: hurrying, reducing the quality of the code, leaving behind broken windows, working when you’re tired (a lot of overtime), Parkinson’s Law, etc...
IT is burdened with this myth because other departments operate in a way that allows them to predict how long their tasks will take. IT is different. Once upper management realizes and accepts this, the company will be better for it.
So what is a business supposed to do? First accept the fact that an estimate is simply an estimate. If you have to hit a deadline, then incorporate the concept of time-boxing. Otherwise, assemble a good team with a good manager, create an estimate, then constantly update those estimates as you’re completing the project. As the project is progressing, you’ll have an idea of when it will be done. Don’t force the team to hit the deadline. Anticipate that the project will be done sometime after the estimate and adjust your business plans according to that assumption.
Annotated Bibliography
Brooks Jr., F. P. (1995). The Mythical Man-Month. MA: Addison Wesley Longman,
Inc.
This book focuses on different aspects of software engineering, such as adding resources to an already late project, using the right tools for development, estimating projects, and more. The author was a professor of computer science at the
Cohen, D. J., & Graham, R. J. (2001). The Project Manager's MBA, How to
Translate Project Decisions into Business Success.
This book presents the business basics that every project manager needs to understand. One author is senior vice president and managing director of the Project Management Practice at Strategic Management Group. The other author has developed a consulting practice in project management and is the author of two other project management books. The audience for this book would be those who are looking for a good grounding in project management. Mentioned in this book is the fact that the old constraints of project management no longer apply to today’s project management.
DeMarco, T., & Lister, T. (1999). Peopleware, Productive Projects and Teams.
The authors of this book discuss at length about how the major issues involving software projects are sociological in nature, not technical. The authors have lectured, written, and consulted internationally since 1979 on management, estimating, productivity, and corporate culture. The book has been described as an Anti-Dilbert Manifesto. The intended audience for this book would be those interested in looking past the common management errors and discovering what approaches really allow teams to excel. If I could only recommend one book to any management member or IT member, it would be this one.
Green, A. (2006). How to Estimate a Software Project. Retrieved November 10,
2007 from http://www.bright-green.com/docs/howto_estimate.html.
This article goes into detail about an accurate method of estimating software projects. Alan Green is a programmer with 15+ years of experience. This article is intended for those interested in a way to estimate software projects. It is relevant to this paper in that it explains that you need a wide range of estimating accuracy based on level of risk.
Hunt, A., & Thomas, D. (2000). The Pragmatic Programmer, from Journeyman to
Master.
The Pragmatic Programmer illustrates the best practices and major pitfalls of many different aspects of software development. Following the lessons in this book will help developers achieve long-term success in their profession. One author owns his own consulting business and the other founded an ISO9001-certified English software company that delivered sophisticated, custom software projects throughout the world.
IT Cortex (n.d.). Failure Rate, Statistics Over IT Projects Failure Rate. Retrieved
November 10, 2007 from http://www.it-cortex.com/Stat_Failure_Rate.htm.
This article displayed and summarized statistics on failure rates for IT projects, including the Chaos Report from 1995. The information contained within this web page provides great insight into the overwhelming failure rates for IT projects. The numbers within it support the idea that estimation is often incorrect.
Olson, D. L. (2004). Introduction to Information Systems Project Management.
This book shows how good project management skills can be applied to the management of information systems. It discusses common problems and pitfalls of managing projects. The author is a professor at the
oH
Staddon, J. (2007). The Myth of Software Estimation. Retrieved November 17,
2007 from http://jeffspost.wordpress.com/2007/08/26/the-myth-of-software-estimation/.
This article is similar to this research paper in that it views estimation as a myth and uses a different analogy to convey that message. Jeff Staddon is a full time software developer and active member of the
Worthen, B. (2002). Nestle's ERP Odyssey. Retrieved November 10, 2007 from http://www.cio.com/article/print/31066.
This is from the May 2002 edition of CIO magazine. It discusses what can and did go wrong in a major project within a large corporation. The audience for this article would be those that are interested in learning from the mistakes of an implementation gone wrong.
Appendix A
Code for a “Simple” Report
DECLARE @CustomerID varchar(40)
DECLARE @Date datetime
SET @CustomerID = 'OTEAMC10'
SET @Date = '2/8/2007'
SELECT cdtc01.CustomerDocumentTypeCode, COUNT(cdtc01.CustomerDocumentTypeCode) as 'Count In',
-- Get the total number of document instances with a failed completion status
(SELECT COUNT(didscs.DocInstcDataServiceComplStatusID)
FROM DocInstcDataServiceComplStatus didscs
INNER JOIN DataServiceCompletionStatus dscs
ON didscs.DataServiceCompletionStatusID = dscs.DataServiceCompletionStatusID
INNER JOIN DocumentInstance di
ON didscs.DocumentInstanceID = di.DocumentInstanceID
INNER JOIN CustomerDocumentTypes cdt
ON di.CustomerDocumentTypesID = cdt.CustomerDocumentTypesID
INNER JOIN CustomerDocumentTypeCode cdtc
ON cdt.CustomerDocumentTypeCodeID = cdtc.CustomerDocumentTypeCodeID
INNER JOIN DataFileInstance dfi
ON di.DataFileInstanceID = dfi.DataFileInstanceID
INNER JOIN Business b
ON dfi.FileOwner_BusinessID = b.BusinessID
WHERE b.BusinessCode = (@CustomerID)
AND dfi.DateReceived >= (@Date) AND dfi.DateReceived < customerdocumenttypecode =" cdtc01.CustomerDocumentTypeCode" succeededyn =" 0)" customerdocumenttypesid =" cdt.CustomerDocumentTypesID"> = cdtc01.CustomerDocumentTypeCodeID
INNER JOIN Customer c
ON cdtc01.CustomerID = c.CustomerID
INNER JOIN Business b
ON c.CustomerID = b.BusinessID
INNER JOIN DataFileInstance dfi
ON b.BusinessID = dfi.FileOwner_BusinessID
WHERE b.BusinessCode = (@CustomerID)
AND dfi.DateReceived >= (@Date) AND dfi.DateReceived <>
UNION ALL
SELECT 'Unknown' as CustomerDocumentTypeCode, 0 as 'Count In',
COUNT(udi.UnloadableDocumentInstanceID)
FROM DataFileInstance dfi
INNER JOIN UnloadableDocumentInstance udi
ON dfi.DataFileInstanceID = udi.DataFileInstanceID
INNER JOIN Business b
ON dfi.FileOwner_BusinessID = b.BusinessID
AND dfi.DateReceived >= (@Date) AND dfi.DateReceived < businesscode =" (@CustomerID)
-- DailyReconciliation.sql








