Lack of Teamwork

The managers on our project have declared that we can work from separate locations once our team has been established to work well together. I am starting to get the feeling that this is not going to happen any time soon. And this concerns me. Because until we meet this objective, we must all work out of a crowded lab at the customer site where there is little parking. That is no fun at all.

The most recent episode that tells me we have little to no teamwork built up is as follows. One developer got tired of teaming up to port an application to Visual C++ 2005 and the Oracle 10g client. So he proposed that he take over the whole applications. He guaranteed that the work would be completed to meet the schedule. However he required the ability to make all technical decisions to get the job done. Furthermore he required the ability to work off site so he would not have to be bothered by the distractions from the rest of the team.

Part of me liked the bold proposal from my coworker. There is always a lot of overhead when you try to get more than one developer to work on a single code base. And I know this guy. He can probably get the job done very efficiently. However this plan in and of itself is direct proof that we are not working well together as a team. It is just the opposite. I am going to let our team lead, our development manager, and the rest of senior management to figure out what to do. In the end I want to be released from the poor working environment, and be free to work from a real office.

Day Before Holiday

I woke up very early the day before the Memorial Day holiday. So I got some breakfast before work. Even with this detour I arrived at work by 6:30am. I was the first guy in the room. The problem with this is that I cannot open the door by myself. I always knock somebody else lets me in. But the day before I noticed that the lock on the door was sticking. So I took a chance and got lucky. The door remained ajar all night. My backup plan would have been to go to the cafeteria and sit around until somebody can and unlocked the door. I brought some work to do just in case that happened.

When I got to work I continued to work on the latest task. Another developer took over the whole application I was porting to Visual Studio 2005 and the Oracle 10g client. So I was to help out another guy who was a VB programmer stuck trying to make sense of Visual C++. It turned out I would be doing all the work of getting the port of his application working. I knew I was in for trouble when the app would not even come up. Apparently the developer converted the string functions to use the new secure CRT versions. But almost all of them used the wrong parameters causing the app to abort on start up. So I hunted down all those bugs and at least got the application to start up and log into the database.

Every time this application that I inherited tried to do anything with the database, I got an Oracle error. It seemed like something very fundamental was wrong. I searched through the configuration of each of the projects. There were some settings that had not been ported from the old Oracle 8i client configuration. But this was not the main problem. So I tried swapping out modules and reporting the old code to see if that would help. No luck. The application was still bombing on every database call. Not of the help online pointed me to anything wrong in particular with the code. So I went back to the old version of the code. It worked fine. I spent a couple hours reporting the code to the Oracle 10g client and Visual Studio 2005. Still no luck. It might be time to look harder at the module in the app that handle the Oracle Call Interface (OCI) details. But I am really at a loss to debug this darn thing.

During the day I was so depressed that I switched to another low priority task. I modified some application code to call a new Report Scheduler instead of the normal Oracle Reports Server. Turns out the developer who wrote the scheduler gave me some seriously buggy code. It was always throwing an error. The guy was not in. So I emailed him telling him his unit tests must not have been too thorough.

The funny thing about the day was that, while I was encountering all these problems, the girl next to me spent the entire day talking on the phone. LOL. Good thing she has a quiet voice. I don't think she is happy with her current assignment. She is a DBA by training. But they are having her do some Oracle Warehouse Builder (OWB) work which she hates. I am not sure if there is anyone happy on our team. This is a bad sign. We shall see where this takes us.

Meeting Mania

Our development manager called a meeting with all the development staff today. We went over the 20 page schedule. Apparently the developers have not been paying close enough attention to the schedule. I discovered that I was assigned some tasks that were supposed to start last week. That was news to me. It was also news to my team lead. Something was not right with this setup.

The meeting ended when we had to run to attend another meeting. The next meeting was short and sweet. We analyzed some changes. Determined which ones would impact which parts of our program. Did some shop talk. Then we bolted. I thought I might have been in the clear. But I had no such luck. The prior meeting reconvened. Some developers tried to get out of the meeting. They got the word that they had to attend. Some other developers were conveniently out of the office and avoided the pain. This meeting never seemed to end. I started getting some flashbacks of meeting hell from prior projects which were doomed. I hope this is not a premonition of disaster to come.

The only relief from this day full of meetings was a series of e-mails from one developer who was working remotely. He decided to go work on another team, having determined that he finished all his tasks. His team lead informed him that he needed to assist with other members of his team. That launched him into a massive email carbon copied to everybody that addressed the state of productivity on the project. I printed out a copy of this email to bring to my lengthy meeting. A couple people asked that I secretly pass my printout to them so they could read the email as we went over the schedule for what seemed forever. I got some more humor when I got home. That is because I checked my email and found more coming from the lone developer working remotely.

Open Source Agenda

My manager gave me the task to rebuild the build machine. I was not the one who initially put together the build system. But I was familiar with it. So I installed all the software I knew I needed. Then I attended to the software I kind of though we would need.

The actual build scripts are written in Ant. So I went searching for the Ant install package. I found the Apache Ant download site. On it there was a combo box to choose the site from which you want to download the software. I left the default value alone and tried to download. But it would not work. So I chose another site from the combo box. No luck either. After trying a couple more I started to think something was seriously wrong. Then I noticed that the download kept trying to get to the default site. That keyed me in to a suspicious button called Change. Apparently you need to switch the site in the combo box, then click the Change button before you choice is registered. This was a pretty screwed up user interface. Eventually I got Ant installed.

I also recalled the build needed something from Java. So I installed the Java Run Time environment. But when I tried a test build, I got some errors. Switching up environment variables did not help any. I did a couple Google searches that triggered a memory. What we really needed was the Java Development Kit. I was amused as I downloaded and installed it. The default was to install the Google tool bar. No thank you. And they advertised Open Office during the install as well. We are a Microsoft shop so we do Office thank you.

Effect of the Environment

My company won the bid for a software maintenance contract. Our proposal was for the developers to work in our company's main campus. Now I will admit that our company has nice offices. However they are located far away from my house. I was initially excited that there was a change at the last minute. The developers were going to work on site at the customer location.

My excitement disappeared quickly once I came to work on the project. Apparently the customer does not have enough parking spaces for everybody. So each day it is a race to get in early to ensure you get one of the spaces. What kind of legit programmer gets into work early? That's not all. The developers don't go out to lunch any more. We are afraid somebody is going to steal our parking space. This is crazy. I got stuck in traffic one day, and even though I started out early, arrived too late to get a parking space. So I went home. Yes you can go find some expensive paid parking that is far from the client's site. But who wants to do that? Not moi.

I think the dire situation has reached the ears of the powers that be in my company. They plan to build out a building that is close to the client's site. Everybody will get their own offices. And there will be plenty of parking. Unfortunately this build out will take at least 6 months to complete. In the mean time, I hear that we will relocate to temporary space in other buildings owned by my company. Hey. As long as they have plenty of parking, I am down with this plan.

Now if only we can find a solution to the lack of network jacks for us to plug our computers in, we might actually be able to get some work done on this project. No kidding.

Going Virtual

The previous contractor on my project had set up a build machine on a computer which they owned. When the contract was up, they kept the computer. The project still needs the ability to do builds of the applications. So my company had planned to just buy the computers from the previous contractor. This plan ran into many roadblocks.

So the development manager had a new idea. Why don't we rent virtual space on the prior company's computers to do our builds? This sounds like a good idea in theory. The development manager approached me, and asked me to float this idea to our CM guy so he could contact the previous contractor to determine the feasibility of the task. Our CM guy was busy pushing out software releases. But he said he would get on this task when the software was released.

I got a call from the development manager asking if we had solidified his plan. My answer was that CM was busy but would look into it. Apparently we were running out of time to make a decision on how we were to do builds. So the development manager tasked me with making this happen. I went to the CM guy, and got the contact info for the previous contractor. The CM dude wondered why we could not purchase the old build machines. I did not know the full answer. But I just said we could not and we needed to make progress on a virtual build machine. I tried calling the contact at the old contracting company. Did not get a call back. So I followed up with an e-mail. The sys admin responded that he was busy but could answer any questions via e-mail. I gave him an overview of our needs, and asked whether they could set us up. He responded that this would not be a problem.

Now I am tasked with setting up a build machine on the virtual desktop that the previous contractor will host. This will take me some time as I need to install all the software that the build machine requires. But I should be able to knock this out.

Bug Fixing

Recently I determined how to duplicate a tough bug. Normally as soon as I can duplicate a bug, I can code a fix right away. However this problem is proving very difficult to fix. I understand what the software is supposed to do. But I am finding it very difficult to locate where I should code the change to fix the software.

The problem I am encountering is mostly due to the fact that there is a lot of abstracted code in the part of the application that is broken. No wonder the thing does not function correctly. This is a maintenance nightmare. In essence, many of the variables are packed up into different structures (or objects), and they are passed back and forth and copied a lot.

To make matters worse, a lot of conversions between the structures are happening. And the changes are supposed to be committed to the database. But it appears like the correct changes are not getting committed. I can appreciate some separation of user interface and business objects. That would be good design in general. But I am digging into multiple layers of business objects. This is no fun at all.

My team lead read my latest status report. I was making some strong advances in our new development. He asked me why I was spending any time fixing bugs. I replied that he told me to. He then said this was not what I was supposed to do. So I happily put the nasty bug fixing aside for easier tasks. I imagine these bugs need to be fixed eventually. My team lead approached the management team to see when exactly we need to deliver fixes to the bugs that have been reported.

Visual Studio 2005

I continue to work on porting some code from Oracle 8 and Visual Studio 6 to Oracle 10g and Visual Studio 2005. There are many string library functions (such as strcpy) that are deprecated in Visual Studio 2005. I think these deprecated functions still work. However my boss told me to port them to the new Secure CRT functions.

Once I had made significant progress on the porting effort, I switched tasks to researching bugs reported in production. I started with the one that was the most puzzling. I figured that if I could knock out the hardest problem, it would be smooth sailing from there. In the morning I got frustrated because I could not replicate the problem in development. I had closely studied the audit information from production but was getting nowhere.

So I went off to lunch. All the other developers were working at other sites today. Therefore I went to the cafeteria alone and pondered the tough problem I was debugging. A toasted Italian sub gave me the fuel to fathom the mysteries of this problem. I sat back and pondered what I was missing. So I questioned each of my assumptions. Doing this helped me think about some of the audit information that seemed funny. Then an idea came to me. I ran upstairs from the lunch room and tested my theory. Bam. I duplicated the problem. Now comes the easy part of coding a solution to the problem.

After work I brought home the laptop that my client had purchased for my use. It was a brand new HP with a lot of options. I connected the laptop to my router at home and "dialed into" work. This allowed me to connect to everything. But it was slow even with my high speed Internet. I guess I will continue to do most of my work from the office. It is nice to have the option to work from home though.