Just an intern

My friend was an intern at a telecommunications company in Bratislava. It was his job to so some minor software development in Java. In retrospect, this turned out to be one his most challenging jobs but not because of the work but because of the equipment.

The computer that assigned to him was slow and quite literally wasn’t quite up for the task. There was enough space for Java, and there was enough space for the development environment Eclipse, but there was not space enough for the source code he needed to change. He was a very clever and industrious developer and copied some code locally a built the rest over the network. The poor hardware was probably due to a very tight budget, which was reflected in other aspects of the company.

That doesn’t mean that his time was completely uninteresting. During his development he did find one super funny piece of login code. The code looked somewhat similar to this.

 Authenticated = false
 try {
    Status = checkpassword (user, password)
    if (status == password_accepted)
    {
        Authenticated = true;
    }
 }
 catch (Exception ex)
 {
    Authenticated = true;
 } 

This pseudo code basically means that if some unexpected action took place while the user was logging onto the program then an exception would be thrown but the exception handler was setting the authenticated flag to true – thus upon serious error during login you wouldn’t need to know the password. To test this theory, my friend disconnected the computer from the network and logged into the software with false credentials. Once the login process was over, he plugged the computer into the network and it turned out he was logged in.

A lot of the actual staff were not employed but were temp workers and in the IT department most of the technical people had a contract that was only for a year. This did provide maximum flexibility for the company but it didn’t inspire much firm loyalty. At the end of his one year internship, my friend was not only one of the most senior people in the group but one of the few who remained from the group he started with beyond the first year.

Taking inventory

The urban dictionary says:

Hacker

Person who gains authorized/unauthorized access to a computer without the intention of causing any damage.

My first job was to help computerize the company, which is a very nice way of saying that the company had purchased a computer and they needed it filled with data – specifically it needed to be filled with inventory data.

It was only in retrospect that I discovered I was a computer person but not a data entry person. The reason that some people become skydiving teachers and others become teachers, clerks, physicists, etc is because the person’s interest and abilities match up with that type of work. I did not know that taking inventory of toilet seats, nails and hinges would somehow lose its shine. It was nice getting a paycheck but after a few months I found it tiring and unfulfilling.

It was at about the same time I discovered that some of the commands that worked on my home computer also worked on the work computer. It turns out that the system was written in basic and it did not take very much examination to read through the code and to jump to other menus. Granted some of those menus were password protected but all you needed to do was list the code and find a different menu further down the menu hierarchy.

I suppose it was the software vendor who eventually they discovered a bit of unusual activity and ratted me out to management. Unsurprisingly they asked that I focus only on my data entry. Shortly after this meeting the source code also was encrypted so it couldn’t be listed, as luck turned out the summer was over and I then was heading back to school. I learned quite a few lessons at this first job but actually the most important was that I was not a data entry person.

Note: I was both a minor and there were no computer Cybersecurity laws in place at that time. (whew!)

The upgrade

The upgrade goals when seen from the management level must have sounded fairly modest. Change the existing process flow for all transactions so they are only entered once and processed end to end without any “manual processing”.

This may not sound like a revolutionary development to bring in straight through processing starting with data entry up until final settlement. That would be really nice but that wasn’t the goal at all. Due to limitations of the existing financial system had some pretty terrible inefficiencies. One example was to enter the data into the backend system, print it out and have someone re-enter it into the front end system so it could be seen on the company reports.

In order to placate the different departments there were a lot of promises of new and better functionality that would be delivered as part of the new upgrade. After all, the vendor had made big changes since the last version of this system.

One of the first problems encountered was the upgrade of our STADS system. During the initial installation of this system the project team built an application of their own using Microsoft Access and Visual basic. This system, STADS, was intended to hold various static data but more importantly to provide the ability to populate an empty database with all of the configuration.

This system was a convenient way to upload the data during the initial project phase. It was so convenient that our client decided to use this as the official storehouse of static data for this system. The problem is that that this homebrew tool when combined with the complexity of the vendors software created a situation where it simply was no longer possible to manually maintain this setup.

A big part of the problem was the IT decision to virtually clone the table structures from the vendor system. Over the years the vendor’s product added new functionality and thus the structure of some the tables changed a little while other tables and relations were totally redesigned. The vendor didn’t have a data model for the original product, nor did they have a data model for the upgrade, and to make matters worse no good product release notes were available.

Nobody from the IT group knew up front how long it was going to take to internally upgrade the STADS solution just to support the basic functions from the previous version. Not only that but IT also had no idea how long it would take to modify STADS to support the new functionality. Each time the vendor delivered a new patch the database structure seemed to have massive changes which again caused the STADS group to re-write large portions of their system.

The goals of the upgrade ended up being like a stick of salami at a party – over time more and more of planned new functionality was being sliced off. The first casualty was the target release of 7.4. The project leaders came up with a lot of official sounding reasons why that was not feasible but the real reason was that the permission structure had changed so much and the code was so poorly documented in STADS they did not feel confident to go beyond the 7.3 patch.

Then straight through processing was abandoned mainly due to integration. The part of the vendors back end system had been replaced with something purchased from another vendor. The vendor’s integration of the two products really was to maintain separate tables with a lot of duplication that needed to be kept in sync.

Even worse, the old system had a lot of data that was no longer available in the new system. The new front end did allow data entry but it was nowhere as rich as the data the existing backend system needed. Because of this multiple payment and extract interfaces would continue to exist in both the new system including the printout and manual entry of data as well as the old system.

Another major feature to be cut from the feature list was the full reporting database. The number reporting tables were limited and the hierarchy was relatively flat but due to other technical issues all of the developers were too busy with other problems to even begin to implement this new reporting system1.

Not all of the problems were related to software. A big resource blackhole was the desire to have a lot of different testing environments – six to be exact. Three environments existed for the existing production (prod, pre-prod and test), but somehow double that number were being maintained for accounting, risk, trading, development not to mention the new pre-prod and related databases.

The tech guys were busier than a one armed paper hanger trying to keep all of the necessarily changes and fixes in sync on all the environment. When they weren’t keeping environments running they were fighting with 20+ hour upgrade scripts that should have worked but did not most of the time.

  • Ineffeciencies
  • Conflicting requirements
  • Political infighting
  • Multiple unnecessary environments
  • None of the promised enhancements

The upgrade took two years, cost a lot of money, and delivered none of the new functionality.

1Actually the vendor had just added this feature. It wasn’t in use by any other client.

Time travel at work

The project received a few new consultants and as such they were not completely aware of all the rules that they would have to adhere to. They created a fix for a production problem in the form of a script and as luck had it new fixes could be installed on the pre-production environment in a few days.

The next day the consultant was going over the list of patches and fixes to be released but was a bit surprised to see that his changes were not on the list. He went over to discuss this with the release manager who explained that this fix could not be installed on the pre-production environment – it must first be tested successfully on the customizing environment. Once it is successfully tested, it will be installed on the pre-production environment

Simply put it cannot be installed as the list of what fixes need to be installed was completed last week and this fix simply was not on that list. The only way this could be installed would be if you used a time machine to go back in time and submit this change before the list was made.

The consultant took away two things from this impromptu meeting

  • The release schedule is not at all flexible
  • If he has a time machine he can get this change submitted

Having a few free minutes and a sense of humor he decided to check out time machines on the Internet and found that it was indeed possible to purchase a “flux capacitor” on Ebay. The “flux capacitor” was a part used in the movie back to the future which involved traveling through time in a Delorean. Deciding to have a bit of fun he submitted the link to the package manager suggesting that with only 400 dollars it would be possible to submit this piece of work and perhaps more.

The release manager, who apparently was also a big Michael J Fox fan, decided to take the joke one step further. He submitted the part to the purchasing department who did confirm that 400 dollars was within the range that did not need a big boss to approve it. Either the person from purchasing wanted to see how far this would go, or didn’t understand this particular brand of humor as he pushed the purchase order through to be approved by the department head. It is not known if the department head had a sense of humor but he did not believe that the project needed a flux capacitor and canceled the order.

You get a free notepad …

I was sitting at work in a meeting taking notes on a notepad. I got the pen and notepad from a colleague of my wife who was a Urologist. I don’t know what all types of problems that she sees on a daily basis nor do I know what most medications she prescribes. Yet, it is not uncommon for most doctors to receive small advertising gifts in the form of pens and notepads from the pharmacy companies – in this case a Viagra branded notepad.

It was this notepad that I was using during a meeting and at the end of the meeting a female colleague looked at it and gave me an odd look. I must have been in a fairly odd mood as on the spur of the moment I gave her the following explanation.

If you purchase enough of their product then you get a free notepad.

I gave her a boyish grin but oddly enough she never really spoke to me much after that.

Playing games for a living …

For some people being a professional video game tester might sound like a dream come true. I personally like to play games and I am a bit afraid of the fast food effect. How many times have you heard of a friend who used to work at a fast food restaurant or a chain of restaurants only to swear off ever eating anything from that chain as long as they live. Recently I met someone who worked for a Japanese console company who told me about his latest business trip.

It seems that his boss was looking for volunteers to go to their French office to do a firmware patch a few of their consoles where were being used for other purposes in a famous institution. Needless to say that there were a lot of volunteers to fly there stay overnight on the company’s tab and then come home. The task is really not very different than a BIOS update on your personal computer. Simply slip in a floppy or a USB stick with the software and type a few commands and you are done.

Our guys were up to the task. They flew over, installed the firmware patch and went on an after hours tour not open to the general public. The tech guys went out and basically really enjoyed their stay. It turns out that this group was actually the backup plan. The initial plan was to fly some people out of Japan to update the firmware, but this plan was later rejected due to it’s costs.

Funnily enough, there was another possibility that was apparently never was given any serious consideration. It seems that there was one more office and it was also in that same city as the client who could have performed this update task. Yup, across town was another office for this Japanese console company that could have also performed the firmware update. Nobody will really know for certain but it seems that the headquarters didn’t trust their Paris office to perform such a “complicated” task ….

Source code control

When I started working on my project it was a large thriving project with hundreds of people both directly and indirectly involved. The company had to hire out a couple of floors in a neighboring building to house this project due to its size.

I vaguely remember from my school days that some of the rather simplistic assumptions that always went along with our homework assignments. They were always clearly defined, they usually never required any graphical interface, and you never needed to do documentation. In the real world, the task was rarely clearly defined, you do need to provide documentation and the budget for tools was always either really small or non-existent.

However, one thing that almost always did exist was some form of source code control. You need to make sure you can reliably build your programs and that none of the code gets lost. That is why I was so surprised at this project. The only tools that was given was a word processor on a slow pc. The good news is that we can compile the code on the server. Not a very productive environment but we could work.

I asked my manager if we could get a source code management tool installed so we don’t trip over each other changes. The answer was no, this had been discussed with the client and they had standards. You could only use the standard tools that where company approved. The reason the answer was no is because there was no budget for their standard code management tool.

Ok, but what about a “free” open source solution. Well, the answer for that was no as well, but it wasn’t entirely clear why this would not be acceptable.

Things in the corporate world don’t always make all that much sense.

Espresso cups

Did I mention that our project kitchen is small. It would seem to be a bit larger if the people wouldn’t stack their dirty dishes so high next to the sink, but scatter them around a bit. Perhaps because so many dishes were next to the sink there was no where else to abandon them but in the sink itself.

I am not always the morning person. So it didn’t take much to annoy me when I couldn’t make my first cup of tea for the day. These were not my dishes nor did I dirty any of them. It was a lot of generic coffee cups and two of the cutest little espresso cups.

I guess I shouldn’t have done it, but I cleaned up the espresso cups and put them on top of the cupboard above the sink out of sight and went to my desk. Some hours later, a new sign showed up in the kitchen asking anyone who may have “borrowed” these cups to please return them. I guess they must have really wanted these espresso cups badly as by the end of the following day the sign was gone as were the cups. Not only that the kitchen sparkled from bottom to almost top.

It seems that the auditors (apparently it was their cups) had a different idea what to do with the dishes. About half of them were thrown into the dishwasher, which by this point was so full it couldn’t be run, and the other half were placed on a cafeteria tablet and placed on top of the cabinet above the sink – out of sight out of mind.

I guess your mother doesn’t cleanup here, nor do her children.

Don’t worry we don’t use that code

It is said that children will say the darnedest things and it is true, but sometimes adults will too. I was working on a project and part of the new functionality that I was responsible for was not working as it should – sometimes that happens in software projects. While investigating a problem I was reading through a lot of different log files in an attempt to find out where things were going wrong.

I one of the log files I saw that Java had an exception due to a missing class. This means that the program had been compiled to use a certain widget class and it was complaining that for one reason or another it could not find this required class. From looking at the name it seemed that this class was probably involved in debug output which I where I saw the error.

I created an error ticket with the vendor who after a few days responded

“don’t worry, we don’t use that class”

Huh? I know that you do or did use this class as there was an error about it in the log file. I did also get confirmation that this wasn’t where our problem was. This vendor was a bit odd and every now and then I can almost see the following scene in their support group.

Support One of the users is complaining about class error MSG36302

Programmer Oh, we don’t use that thing any longer, it was replaced by the x76 ventiligator version 17.6 but only on Unix, Linux not on Mac OS or Windows … well since the upgrade to 7.3.02 anyhow.

Support Uh, what ?

Programmer Well, that’s an interesting case, if for some reason during the initialization of virtual state machine … 5 minutes more of this goes on … and that is why we had to upgrade to 7.3.03

Support I will just them them we don’t use that class

Programmer Close enough.

Tales of a milk thief

It is an unfortunate fact that some people feel quite comfortable taking things that do not belong to them. I don’t know that anyone’s lunch went missing but as one of the three people who regularly put milk into the refrigerator I can confirm that missing milk was fairly rampant.

I was curious if the other two colleagues experiences were similar to mine. It was then that Martin had a great idea. One day when I went into the refrigerator I saw a milk carton that had a picture on it. It might not have been Stalin, but that is who it reminded me of. Below the picture were words. I no longer have access to the original English and German text but the general meaning was this.

“This is community milk belonging to the community milk project. You are free to have some but if you do participate please support the project by providing milk too”

Funnily enough, a few days later there was another milk carton who also proclaimed that he was also part of the community milk project. Perhaps someone felt guilty about past behavior and was actually providing milk.

One day while heading to lunch, I was speaking with the two other guys who sometimes were missing milk. One of them started the community milk project and at that time we found out that the other person, Stephen, was had also joined the milk project. So it was the same guys providing milk but now without any of that nasty gilt for those who were taking it. Nobody else ever provided milk and the milk project was shelved some weeks later.

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close