|
When Bob first asked for an article on my worst mistakes, I responded along the lines of, "Well, I'm down to 137 of them. What filters do you want me to apply next?" Hearing no response, except for the far off distant laughter, I decided to try to list one or two in several categories. I hope this article will help to keep you from making the same mistakes yourself.
Politics What I learned painfully over the years is that if you don't make some effort to both "read between the lines" and quietly make contacts within the organization in order to glean information, you will often find yourself working against expectations. This is easy to say, but difficult to do. For someone who is as pessimistic and paranoid as I am, I still find myself optimistically believing what I am told. As an example from my consulting days, I was brought in to evaluate new Version Control and Defect Tracking solutions. I was specifically told to not include ClearCase and ClearQuest as they had already been eliminated. After doing surveys, literature searches, one-day evaluations, etc. I came up with a short list of tools that would do the job for an affordable price. I included the full list of products included in the evaluation as an appendix in the formal report. After it had been submitted, I found out that the Manager that had brought me in did not want to go with the corporate standard tool suite - ClearCase and ClearQuest. His managers wanted to know why the tools had not even made the first cut for evaluation and used that as justification for ignoring the report. He ended up in a defensive position and I took the heat. I have found that this holds true even in permanent positions. If someone way up the hierarchy, even if they are not in your chain of command, holds firm beliefs, then you may well be tilting at windmills to get changes made - regardless of how logical and cost effective they are. Conversely, if they are ready to make a change, it may be your only opportunity to have a say in the direction your department will be going. Culture
The difference between the first and second allows statistical analysis to be performed to determine the coding patterns that are most commonly made that result in compile errors. QA can then determine simple coding changes that will reduce the time necessary to get to a clean compile. The difference between the second and the third allows for similar statistical analysis to the types of logical errors programmers make during the implementation of a design. This works fine - for the appropriate cultures! If the culture lends itself to Continuous Integration builds that always take the latest checked in code, then the delays between these stages becomes intolerable; especially for large teams. On the other hand, there are cultures that resist any changes made by another department. I guess that could be summarized by saying, "choose your battles based on what you can win." Over-Develop/Customize What I have found out rather painfully, is that most organizations would just as soon get something up and running quickly, even if they don't understand it, than to take extra time. Errors, if they are never "posted," just don't rise to a level that anyone needs to be aware of. I have also found that people that pick up an implementation seem to prefer simple procedural coding to the more generic data-driven model. And it is easier to replace something small than figure out something large. As an example of this, at one company I was implementing an interface between ClearCase and ClearQuest (and yes, I know they make one themselves - see Politics above) and determined that there were too many developers on too many projects to allow the interface to "block" waiting for an update to occur. At the same time, check-ins against inappropriate defects needed to be disallowed. Calling on my real-time, distributed processing background, I created daemons on each of the servers that communicated via TCP/IP. Each daemon queued its work and new requests could cause any of the queues to be reprioritized based the need for a fast response. They also allowed some level of data caching to be performed so API calls were not needed all of the time. This allowed very scalable growth, background ad-hoc queries and reporting and a decoupling of the release levels of the two products. What happened you ask? As soon as I was gone it was ripped out. There was no one there with the background to understand asynchronous communications and distributed processing, much less understand the requirements of daemons. They went back to a linear, start-to-finish processing for each of the triggers and learned to live with the performance penalties. Of course, it was all the fault of:That Consultant and IBM's products. Tricky Code An example of this is processing XML files. The easiest way to do this in perl is to use nested hashes. Anyone who has ever had to reverse engineer nested hashes will appreciate that, while it is almost the only practical way to store the data, it will confuse just about everyone who tries to read the code. Iterating through nested keys is not for the faint of heart. Version Controlling CM Artifacts Most of the CM Artifacts do not require branching (you do make your implementations backward compatible, don't you?) and are not very large. Something like cvs or subversion meets the needs admirably. Just make sure you keep the implementation simple since it is likely that others who do not understand the "other" system will be able to figure it out otherwise. Customization Not too long ago, we were using cvs as our Version Control tool of choice in a rather large Agile development project. It became evident that we were having major problems controlling the merges from one branch to another, especially when someone refactored the code. I had several triggers in place along with a daemon or two that were responsible for doing pre-commit validation and periodic summary metrics. When we switched to AccuRev, the entire cvs infrastructure had to be reevaluated and the appropriate parts reimplemented for AccuRev; and not all of it was possible. Once it was operational, AccuRev proved to be a good choice and solved a significant number of problems, some of which we did not even know we had! The bad news was that once again I had created triggers based on a "standard" stream structure and naming convention. One day, the Mangers of both Development and QA came in and said that they needed to change the process - and that the changes would require changes to both the stream structure and the naming convention. And I needed to have it operational within 12 hours. The fact that I succeeded is a testament to both AccuRev and my not having over-customized the implementation this time. Expectations When the primary stakeholders have different expectations, and when those expectations are not understood by all parties, a major problem arises. This has been responsible for many project failures and the association of the proponents with the failures. Very many of these and one is looking for new avenues to explore. Years ago, I subcontracted to a tool vendor to install a multi-platform Version Control tool with a GUI interface for one of their customers and to provide training on its use. It wasn't until the second day of training that I discovered what they thought they were getting was an IDE solution on Windows that would replace X Windows and NFS access to their UNIX systems so they could access their tools and source code transparently. This was not something the tools GUI could do! The sales people had not paid enough attention to what the customer was really asking, and the customer was either not asking the right questions or understanding what the sales people were saying. Regardless, the plug was pulled and I got to go home early. Summary Ben Weatherall is currently based in Fort Worth, Texas where he practices Practical CM on a daily basis using a combination of CVS and custom tools to support a modified Agile-SCRUM development methodology. He is a member of IEEE, ASEE (Association of Software Engineering Excellence – The SEI’s Dallas based SPIN Affiliate), NTLUG (North Texas Linux Users Group), and PLUG (Phoenix Linux Users Group)
Set as favorite
Bookmark
Email this
Hits: 5153 Trackback(0)Comments (3)
|
|
... Ben, Great article. These stories are both scary and amusing. Thanks for sharing /Anders :^) |
|


When Bob first asked for an article on my worst mistakes, I responded along the lines of, "Well, I'm down to 137 of them. What filters do you want me to apply next?" Hearing no response, except for the far off distant laughter, I decided to try to list one or two in several categories. I hope this article will help to keep you from making the same mistakes yourself.

