Hi!

I ahve worked for a big swedish company as webmaster, .net programmer, architect for about 6 years. recently I quit and started to work for an IT consulting company much closer to my home town. And the first project I was assigned worked very well, since then I was responsible for the design and development.

Now for the past 6 weeks I have been working for another customer in another project. And well, lets just say that Im at home right now on sickleave because I had some kind of mental collapse last wednesday evening (after a 14 hour work day). Im feeling okay now and I hope I can get back to work in a few days. But I have had some time to think about what went wrong and how I could have prevented this mess.

For starters, the project had a timeline of 6 weeks. My responsibility was to create a database for some data, write some stored procedures that processed this data based on some business rules and to export a csv file that would be imported into their ERP system. To begin with, I have no experience whatsoever in financial systems, and this reconstruction of the data was pretty complicated. The input data was given to me as pivot diagrams, bits of text in emails etc etc. No analysis had been done on the data to verify that it could be processed with their business rules. And the business rules was written on such a high level that it would be impossible to write code just by reading them. At least impossible for someone that didn't have any experience in this field (my background is technical, not financial).

I started by designing a database to hold the data. There was no method to verify the integrity of the data, and I could use no other PKs other than an auto number for all the tables, because there where multiple identical records and they couldn't tell if it should be like that or not.

Then I started to design the stored procedures. And immediately I hit several big problems. I should distribute money (from a table) onto the assets (the other tables) based on a distribution matrix. The problem was that these three items didn't match. The money was structured some way, the assets in another way, and the distribution matrix in a third way. This means we had to start writing translation tables so I could write the logic. Pretty soon the database diagram become very complex, and the design got worse for each passing day. When we finally had some runnable scripts that did work, I sat down with the "expert", since I had no written specifications, I had to sit down with him and we went through line by line in the specification and he said, yes that should do it! Ok, now I thought we had QA on the scripts, so we started to run the scripts. When they later analyzed the result it was a real mess. Nothing was ok. I had created a dummy record to hold the money that could not be inserted, and this had a pretty big amount. This meant that the business rules where flawed, because the logic could not distribute 100 % of the money onto 100 % of the assets. Now I felt that the persons responsible for the solution started to get desperate, because they started to go on in terms of "try this.." "change this...", "what if we do this..."

Now we where about 2 weeks from the put in production date. It went on like this for about 1 week, lots of overtime. And then they found out out of teh blue that they could not calculate deprications for the assets in excel, as their plan was because the calculations where too complicated. They wanted to do that in the database instead. Ok, one week to deploy date, scripts where still beeing tested. And they had no clue what so ever on how we should do this. We had about 14 different scripts, and the deprications should be distributed pretty much in the same way as these scripts. They thought we could just copy paste the original scripts, and do changes whenever it was needed. At this point I was about ready to just go home.

It was later that same evening when they tested one of the scripts and found out it didnt work... then I had some kind of beakdown in teh restroom, and I had to ask my dad to come and pick me up because I couldn't drive by myself.

And now when looking back at this, I asked myself 100 times, what could I have done as a consultant to prevent this. I came up with several things I would do if I was the project manager

1) Spend more time on analyzing the data, to find out the quality and if it works with the business rules. This can easily be done in excel and access.

2) Spend more time on the business rules, write them in more detail so someone that isn't skilled in financial terms can understand them.

3) Write some kind of test specifications, e.g. how can we verify that the scripts perform the way we want. As it was most of the time, they had no way of knowing if my scripts performed 100 % as they should because it was written as trial and error and assumptions.

My task was to write t-sql scripts and to create a database. I must assume that my job was not in this case to write some kind of system specification (which was really needed). I could have told them right from the beginning that its impossible for me to write scripts if you had not figured out how things should work for starters. But this was my first assignment at this company, and by the time I realized where this was headed, it was too late.


what do you think? How should a consultant act in this case? Because such assignments are futile both for the health of the team members and for the project itself and its deadline. At my previous work we found this out 2 years ago, and made damned sure that projects like this where never allowed to start.

kind regards
Henrik