All companies are dominated by stupidity. What makes the difference is the amount of compensation you get for staying there.
 

  Site about "championism" and "champ" firms on Croatian IT market.          ->Croatian site
  What is championism? | Champion's manifest | The Legend of champions | Weekly poll
  Legend of champions
  Prije (Previous) Nastavak (Next)
  DAMP - Dodoni application for managing projects
 
 

Champ project management
Champ programming

DAMP fact sheet

DAMP was a leading application of Dodoni computing, a race horse in which Erich invested the most of his money and the majority of his hopes. It had to be a "light" version of MS Project, designed particularly for specific needs of Dembelian clients. On many occasions Erich used to say that most of his prospective customers find MS Project too complex and in the same time not enough suited for their specific needs. In fact, they needed a much simpler application that would in the same time cover all their specific requirements.

The first version of DAMP was developed for NeilHorce, big Dembelian bank. When Bojan came to Dodoni, the first version has been already delivered to client. In the best champion tradition, the first version was unstable, unfinished bug-prone application that soon required numerous bug fixes. In the same time, due to a brilliant champion requirement analysis, client bombarded the development team with equal amount of change requests. Bojan's new colleagues explained that DAMP was the reason that Dodoni started to grew into a real development firm and hired new people. Before DAMP, Dodoni computing consisted only of Zakro, Patrik and Maddog who developed small one-man project applications. DAMP was the first serious project that could possibly involve the whole development team and possibly make Dodoni a success story and launch that firm into Top500 Dembelian companies.

When expectations don't match reality

Unfortunately for Erich, big expectations and huge doses of optimism were not enough for the project to succeed. No matter how much he fooled himself and invested more and more money into that monster, DAMP was still a failure that stood no chance to become successful and profitable project. The main reasons are sublimated in next paragraphs.

Champ project management

The first reason DAMP didn't become a successful project is quite obvious - project manager was Zakro. Although there are people who can turn into a gold everything they get grip on, Zakro was definitely NOT one of them. During the development of DAMP, all his project management "qualities" were clearly exposed:

  • Poor requirements analysis according to principle "Read client's mind and never ask questions"
    If at the end you get a bunch of functionality that should be thrown away and entire parts of application rewritten, never mind because there are stupid programmers who will work overtime to compensate for your bad decisions. In most cases Zakro got the requirements document directly from client and since he didn't know the word of Dembelian language he had it translated and then he tried to understand it. The translation was mostly done by Astrid, outsourced translator and sometimes by Erich. In either case much of the original meaning was lost by translation because Astrid didn't understand technical stuff and also didn't have a clue about the business problems of the client. When Erich did her job results were also disastrous, which spoke enough about his knowledge of business and development issues. So, when you add Zakro's ignorance to already unusable documentation and his refusal to ask additional questions, you can easily predict the result of his work and what chances his developers had to deliver the application that could satisfy all client's needs.
    Off course, there were cases where client was extremely fluent in articulating his wishes and he knew to the tiniest details what he wanted and how he expected the application to look like. In such cases Zakro didn't have so much chance to screw it up and if project was assigned to normal developer like Bojan or Bartol, chances were great that client would be even a little satisfied with the outcome. Unfortunately, most of the clients didn't belong to that group because they didn't really know at the beginning what they really wanted. Instead of bombarding them with additional questions and clearing up the requirements, Zakro and Stinky tried to read between the lines and designed the solution they thought it reflected client's wishes. In most cases the end result was that application was good-looking, sexy, full of nice icons and toolbars but completely missed its purpose. The first response of many clients, when faced with the first version of the long desired application, was: "That's not what we asked for!"
  • Total absence of planning and design.
    Zakro didn't bother with project planning activities like writing functional specification, verification of the specification by the client, writing project plan with detailed list of activities, scheduling, resource allocation, writing architecture document etc. His project management process consisted of calling his head developer (usually Stinky) into meeting room and discussing what was in client's mind and how application should look like. When they reached some agreement and thought they understood everything, he let developers begin coding and all he had to do was to wait for the first forms to appear so he could make his observations and demand changes. God forbid that he maybe produced some document or application prototype. He considered such things as waste of time and expected that after his directions next step should be nothing but coding. Or better, hyper production of ugly, dirty, Visual Basic spaghetti code.
    It wouldn't be fair to omit the fact that in some projects there were functional specifications, prototypes and architecture documents. But don't worry, none of them was produced by Zakro. He knew how to delegate his responsibilities to other people.
  • Unrealistic scheduling.
    The worst consequence of closed meetings between Zakro and Stinky was that they came up with the final estimate and delivery date for which they didn't consult other developers. The same delivery date was also immediately communicated to Erich who would forward it to client so it was impossible to prolong it later. It wouldn't be a problem if the estimate was done correctly instead of being overly optimistic and having only one purpose of pleasing Erich and the client. Delivery date derived from such an estimate was off course impossible but they knew they would code until the last minute and the application would be full of bugs like many times before. Testing would be done by client anyway, so they could have easily omitted it from the schedule. They also didn't count time for planning, design, debugging ("We develop bug-free programs", "We'll debug after client gets it"), testing, code review, quality control, making installation disks etc. 
    To make things even worse, when it came to dividing work among developers, Zakro would use famous method "Give me more Chinese and I'll finish the Great wall sooner" (see story of Erich) and calculate: "We have 100 person-days, three developers, that means we are done in 33 days!" From this absurd calculation they would derive deadline date that would be, as you can expect, totally unrealistic.
    When speaking of the first version of DAMP that has been delivered before Bojan came to Dodoni, Zakro used to say that right from the start it had totally unrealistic delivery date but he blamed Erich for that. He said that Erich set fixed date and demanded that application should be finished by that day. He used that story as an excuse for coding horror that could be found all over DAMP source code and he also claimed that it was a main reason that DAMP had no documentation at all. "We got a deadline for which we knew it was impossible but we did our best to prove we could make it and at the end we succeeded", Zakro would say full of pride. "Yes, you succeeded in creating a monster for which there is no other cure but to destroy it completely and create it fresh from the start", Bojan thought when listening to Zakro's stories.
  • Lack of any progress tracking and code review.
    Any outsider who would find himself in Dodoni seven days before important deadline would have no idea that something so important is on the horizon. The atmosphere would be relaxing and calm - some champions would write code, others would surf the Internet, Stinky would send messages to his friends over ICQ, Maddog would spend all day downloading mp3s and porn, Zakro would pretend to write documents and they would all finish their "work" exactly at four o'clock and go home. Like everything was under control and they had plenty of time.
    In most of the cases the reality was quite opposite from their behaviour - project was few weeks late but neither Zakro nor Stinky had courage to face the truth. Even if they realized that they were behind the schedule, they believed that in last few days they would miraculously make up for the lost time and finish all code until deadline. The typical progress control in Dodoni looked like this -  Zakro would summon all developers in the meeting room and then asked each one of them how much work was done and how much they still needed to finish the task. The standard answer was: "90% of my code is finished, there is only some minor stuff to be done and that's all". Zakro wouldn't check the validity of the answer because, although he was incompetent, he knew that when developer said "90% is finished" it really meant "only 50% or less is finished". So he fooled himself and decided to believe in those claims. When everybody spitted out their projections, the meeting was concluded and all attendees happily returned to their work full of new optimism and faith in the project and great leadership. 
    Their optimism lasted until the last day before deadline when they realized to their horror that code was far from being finished, it was full of bugs, unstable and there was no even a theoretical possibility to deliver fully functional version to client in given time frame. Their reaction was typical - panic spreaded all over the office, developers would enter solo-development mode and everybody would try to make his part work without caring for the application as a whole, the deadly code-debug-test spiral would start to spin faster and faster...The craziness would end when they assembled something that wouldn't crash too often and then Zakro would make an installation program, test it once on test machine (not longer than half an hour) and send it by e-mail to Dembelia.
    The described scenario usually happened on Friday afternoon because Zakro knew that it was the best time for delivery since Dembelian clients already went home and nobody cared if champions were late with delivery hour or two. After he sent the package to client it was all over and champions went home for a weekend happy because once again they "succeeded". However, their happiness lasted only until Monday morning when Zakro started to receive angry calls from Erich because client reported that application didn't work or it was full of bugs. Soon the bug list would arrive by e-mail. Zakro's response was typical - he started to assure Erich that it was not such a big deal, that client was exaggerating and that most of the bugs were of cosmetic nature because they focused on business critical functionality. "Most of the things were done, we made it", he would repeat to Erich so everybody could hear him. Bojan and Bartol were puzzled by the fact that at the end he always managed to calm Erich and to assure him that everything was under control and there was no reason for panic. After that life was back to normal, champions would start to work on the bug list at their own pace ("Why four developers need whole week to correct 20 bugs?" - quote from Erich) and the whole process would start all over again. Only difference was that Erich and his firm lost another big piece of respect in client's eyes or in worst case, the whole account.
    Not learning on past mistakes and lack of post-mortem project analysis
    Typical for Zakro and his right hand Stinky was that they've never learned on their mistakes. Why? Because for them their mistakes never existed - they were simply perfect. Person who wants to improve would need no more than one lousy estimate to decide not to repeat the same mistake again and that next time he should devote more time to planning and project progress tracking in order to deliver on given date. However, Stinky and Zakro repeated the same mistakes over and over again. The main reason was they weren't competent enough to work in any other way and possibly improve their working procedures or quality. Unfortunately, they had power and authority to make their way the only way how to do things in Dodoni computing. It was grotesque to look at them smiling and congratulate themselves when they finished a project. Instead of being ashamed for creating shitty code full of bugs and sending it to client and in the same time forcing people to hit impossible deadlines by working under stress and sometimes overtime and on weekends, they thought they made a heroic effort and that they were geniuses. They would even call the whole team for a drink and there they would again praise themselves and glorify their achievements. They would do the same thing on post-project meetings. Such occasions were used only to pump unrealistic optimism, not to analyse mistakes and try to learn from them. If somebody dared to mention that maybe something went wrong and that everything was not so great and groovy, they would accuse
    that person of being pessimistic and start to undermine his authority and knowledge by pointing to mistakes he made. The message was clear: "Shut up and don't spoil our fantasy or we will destroy you. If you keep insisting, we will assure Erich that you are the only responsible for all the bad things that happened in the project".
    At the beginning the scapegoat was usually Bartol, but Bojan also found himself in that role.

Champ programming

The second reason why DAMP was a failure was that most of its developers lacked knowledge and experience in building professional business aplications. To make things worse, they weren't aware of that fact.

  • Monolithic architecture
    The first version was created by Patrik, Maddog and Drazen, temporary worker. The project manager was off course Zakro. Bojan tried but never found out which one of them was the most responsible for the cardinal sin of the DAMP, the monolithic architecture where majority of the code was written directly inside VB forms, or more precisely, inside event handlers. There were few modules and some classes but 90% of the code has been put inside forms, thus making strong coupling between user interface and business and data tier. Patrik and Drazen weren't so incompetent like Maddog and Bojan got the impression that they were capable of making much better architecture but it was a mystery why they chose to undermine their reputation and create such crap. Maybe Zakro insisted on such simple and dirty architecture because it was the only thing he understood? Maybe he forced others to make quick and dirty solutions because of the schedule pressure? These and the other questions that bothered Bojan were left unanswered because nobody wanted to talk about the first days of DAMP. The people who created the first version reminded Bojan of group of soldiers who committed war crimes and were ashamed of that and didn't want to talk about it.
     
  • Random database access
    Monolithic architecture wasn't the only DAMP's sin. The second and even worse was related to the design of the database and the way the application communicated with it. When Bartol first looked at a DAMP SQL database, he asked a simple question: "Where are the triggers and stored procedures?" The answer he got was: "Trig.. what?" It was obvious that most of the DAMP developers learned to program using Clipper and Access and they never bothered to learn what the SQL server was and what were the differences between real database server and the desktop databases they were used to.
    Let's name some of the biggest mistakes in this area:
     
    • VB code was plagued with hard-coded SQL queries. Most of them were coded directly into event procedures of the UI forms. There was no data tier or even separate data access module.
    • On startup, DAMP opened database connection and cached it in global variable for the whole life of the application. If connection crashed or server went down, application crashed too because there was no error handling for such a situation and code optimistically assumed that database would be up and running forever.
    • When opening ADO recordset, application used server-side cursor of type Keyset because Janus GridEx control could have been bound only to that type of recordset. Nobody cared to think about the other solutions because, as Maddog would say, it was faster that way. In the spirit of "code like hell" principle that dominated Dodoni, things like disconnected recordset or unbound grid were treated like blasphemy.
    • Recordset parameters were used inconsistently, without thinking of possible consequences. It was clear that each developer used his combination of cursor type, lock type and other parameters. Nobody ever cared to correct that and make unique rules how to define recordsets.
      In time Bartol made some changes to the database and introduced triggers and stored procedures, but he never managed to persuade all his champion co-workers to actually use them. He didn't have problems with Bojan because he didn't even think to use ad hoc queries in his code, but Maddog and Stinky were different story. Because of their laziness and lack of programming discipline, DAMP remained strange mixture of different data access approaches for a long period of time.
       
  • Consisteny and code convention - forbidden words.
    DAMP didn't have any code convention in written form so every developer had complete freedom in his programming style. To be honest, there was one convention that most of the DAMP authors followed passionately. It can be best described as "code quick, dirty, use copy-paste method whenever possible and never, I mean never comment your code!".
    Also, there were never discussions or design reviews how to implement some functionality. Instead, every developer could use any solution he liked at that moment. That led to tremendous inconsistency in the whole application. To make things worse, inconsisteny didn't exist just in code but also in the user interface. Some forms had buttons on the left, some on the right, some had record navigation buttons, some hadn't , some of them were modal, others modeless and so on and so on. The only person that pointed out to that inconsisteny was Bartol but every time he did that, he was harrased by Zakro and Stinky who didn't see any problem in DAMP user interface and code.
    Like user interface, DAMP code was swamped by various and totally different design and architectural solutions. Some solutions were so ill, troublesome and error prone that it was obvious that their author learned to program when created them. For instance, DAMP had custom ocx search control, which was so unusable and poorly written that it was clear to everybody that Stinky at the moment wanted to learn how to write OCX controls so he gave it a shot. Also, DAMP had custom dll written as ActiveX control that was used to impose security on menus and toolbars. Again, it was plain obvious that author thought: "OK, let's see what else we have in Visual Basic. Active X, what's that? Let's try it!".
    As of optimization, there was probably no control that some developer didn't try to utilize. So, some forms had normal VB controls, while others had MS Forms 2.0 family of controls. To achieve menus with icons, Stinky introduced Activebar control although it wasn't very stable at the moment. When new DAMP developer opened source project in Visual Basic IDE, the first thing he probably wondered was why the control toolbox on the left spreaded to the bottom of the screen. If he dared to open References window, he would usually be shocked of how much external libraries were used in the application. No wonder that exe file had 8 Megs in size. Sad thing was that some of those libraries and controls weren't used any more, but nobody cared to clean up that mess. It was obvious to everybody (except maybe Zakro and Stinky) that only reasonable cleanup procedure would be to delete whole DAMP code and rewrite it from the scratch.
  Prije (Previous) Nastavak (Next)