Job Choice

I was working on a project that was a government contract. A new company won the re-compete of the contract. So I inquired with the new company about joining them. I have a lot of years experience on this project. The new company said I cost too much.

At this point I considered staying on with my own company. They had another huge project which seemed to fit my skill set. I got a letter from Human Resources confirming my switch to the next project. Then I got a message from that project stating that I needed to schedule an interview. That seemed odd. I called them up and told them that Human Resources was already reassigning me to their project. At that point I found out that I did not have a position on that project. They were only considering me.

Well I went to the interview. I showed them I knew my stuff. My only stipulation about joining their project was that I was not planning to work overtime. This project had a lot of problems. The default means of confronting those problems was to have everyone work crazy hours. I wanted to be sure from the onset that I was not going to engage in that madness.

An old coworker of mine had joined the new company that won the contract for my old project. He told me that he could really use my help on the project. I informed him that they balked at my salary requests. My old friend said he would talk to the top manager on the project. He said he would try to convince him of my value.

Eventually I met the top manager in the new company. He said he could not pay me my desired salary. However we made some concessions and I decided to join the project. My old buddy was very happy. I was also pleased since I really liked this project, and it would not require any overtime to speak of.

I got the real confirmation when I heard the customer was phasing out the big project I was thinking about joining at my previous company. Being the new guy, I would have been the first to go probably. There was no way I could have guessed this would happen. Well maybe I knew something was up when every developer was working crazy overtime. Sometimes you just get lucky with your employment choices. I know I sure did.

Evil Coding

I got assigned a difficult trouble ticket. The customer was reporting that a lot of garbage was being displayed on the screen. Initially a developer thought it was just the wrong version of some DLLs being installed. So they made the resolution be to reinstall the application. This did not correct the problem. The customer reopened the trouble ticket. We get dinged when that happens. My team lead assigned this to me.

Some other developers continued to believe this had to do with old DLLs being installed. I told them this might be the cause. However I needed to see it myself. I would not believe this unless somebody could duplicate the problem. Nobody was able to do that except the customer. I took a look at some log files. That did not help much. It seemed like the program got messed up immediately upon startup.

Another developer said he solved a similar problem before. He said he found an instance where the code takes a CString object, gets a constant pointer to the char data it holds inside, then casts away the const. Then the code would go ahead and write to that pointer. It just so happened that the CString object was empty. So the location in memory that has the empty string got corrupted. That just blew away my mind.

I went and searched through the code that gets executed early or frequently in our program. Sure enough there was another instance where the code does the exact same thing. The const was casted away. And the code started writing to the location identified by the pointer. Here is where this insanity actually turns funny. I saw a comment from the original developer who wrote this code. He admitted that he did not quite understand the CString class. That is why he was casting back to the familiar character pointer.

The good news is that the fix to this problem resolved a number of trouble ticket the customer had opened. These problems were ones that developers could not reproduce. They were instances where our application was behaving very strangely. In fact, another developer asked me to let him know how I was progressing with my trouble ticket. When I explained some of my findings, he recalled back to the similar bug he fixed before. And it turns out that this led me to finding the solution for the problems he was investigating. Teamwork does pay off.

Game Creators Dark SDK

I ran a second instance of Visual Studio 2005 to debug a problem. Normally I close the default window that comes up in the source code pane. However this time I took a quick peek at it. There was a free download called the Game Creators Dark SDK. Apparently it was to assist you in writing games quickly. That sounded good to me.

So I forwarded the link to my second work computer. It is the one that is not mission critical. First I downloaded and installed Visual Studio 2008 Express Edition. It is free from Microsoft. Then I also downloaded and installed MSDN 2008 Express as well. Finally I downloaded the Dark SDK. However when I ran the installer, it complained that I did not have DirectX installed. Luckily it prompted me to start a download of the latest Microsoft DirectX SDK.

The DirectX installer had a couple errors. They said that the XAudio2 version that came with it had expired. I was directed to get an upgraded version. It was a little hard to figure out this was holding up the installation. The error dialog came in under the main install screen. I just figured something was wrong because it was taking so long. Then I thought I was ready for the Dark SDK. However I still needed to run Visual C++ at least one time to allow it to do some setup.

I created a test Windows application. It was a little disturbing because the Express Edition only comes with limited support for Windows programming. There were not frameworks such as MFC that come with the Professional versions I am used to. The generated code actually had a WinMain there. The prime objective was met. I finally got the Dark SDK installed. I ran the demo browser. The screen shots for the demos look exciting.

The only problem I have now is finding time to dig into this SDK. I am also trying to bone up on computer security to get another gig here at work. Next month I start a Java programming class at the local community college. I thought maybe I could play with this SDK during my vacation. However the missus had put the kibosh on that idea. Oh well.

DreamSpark Advantage

Microsoft has this program where they give free software to college students. It is called DreamSpark. Recently I signed up for a community college course to help brush up on my Java coding skills. So I figured I would take advantage of this offer. I wanted to get a free copy of Visual Studio 2005 Professional. Yeah I have a licensed copy of this tool at work. But I want a copy for my home computer. This thing retails for almost $700 on Amazon. Even the upgrade version is over $400. Free sounded like too good an offer to pass.

I went to the DreamSpark web site. You have to verify that you are actually enrolled in a college program. The instructions said to choose your college from the drop down. Mine was not listed. Oh no. The fine print said that even if your college is not listed, you can use a third party to validate that you are enrolled. I was willing to jump through such hoops for a $700 software package. I went to JourneyEd, which Microsoft uses to validate non participating colleges. They had me “order” a validation even though it did not cost me anything. I emailed them a scanned copy of my acceptance letter to my college.

The next day I got an email back from JourneyEd stating that they approved my request. I return back to the Microsoft site and got verified. I chose Visual Studio 2005 Professional and started the download. There were two files to download. I assume these files correspond to the two CDs that come with the real product. The next day the download was complete. I did not want to burn these images to real CDs. So I downloaded another unsupported Microsoft utility which mounts the ISO images files and makes them look like they are actual CDs in a CD drive.

I tried a couple times to install Visual Studio 2005 Professional. Each time I chose a custom install and only chose those components I really wanted. And each time the install bombed in the middle stating an install file was missing. I don’t know whether there is a bug in their install program, or whether the images they provided were bad, or if the virtual CD utility I was using was buggy. The end result was that I could not get the software to install.

Hey. We are talking about $700 worth of software here. I was not about to give up that easily. I decided instead to choose another download. This time I chose Visual Studio 2008 Professional. Even though we are not using that version at work yet, I figured it was close enough. The install went fine. Now I got a C++, C#, and Visual Basic development environment. I also installed all MSDN documentation I would even need. Thank a million Microsoft.

Value of Time

Our project has a requirements analysis team. Everyone on that team is new. So they don’t really have any domain knowledge. That’s a bad position to be in when you are supposed to work with the customer to figure out what changes they need to the system. I have been working on this system for a very long time. Once they found this out, the requirements team started needing a lot of my time. They schedule a lot of conference calls. In order to get my work done, I decided to just skip these calls.

The requirements team figured out that I was no longer dialing in to their conference calls. They are smart. They started asking me questions about the system as it pertains to some new requirements. That is fine as it does not disrupt my schedule too much. The problem is that they are unable to fully comprehend the answers I give them no matter how hard I try. Later they try to discuss the issues with the customer. Due to the lack of full understanding, I end up getting called in again.

I am not exactly sure how to deal with all of this. Everybody is new on the project at one time or another. But you only get to use the new card for the first couple months. After half a year, you really don’t have much of an excuse if you cannot do your job. I don’t like doing other people’s jobs for them. I have my own duties. And I expect everybody else on the team to pull their own weight. Otherwise why does the team need you?
In the past, I have dealt with people on the requirements team that lacked the domain knowledge to do their jobs. This was a typical problem. I guess I got a bit spoiled when the last team of requirements analysts was actually pretty good. They did not know everything about the system. However they were able to figure things out themselves. They also did not pretend to know a lot. That attitude went a long way to good relations with the development team. Now that they have left the project, it feels like we have to start all over again with the team.

I think I can fully appreciate a comment made by one the gurus in the customer organization. Some of our key developers left the project for greener pastures. The customer was disappointed in that he had finally got some developers up to speed. And then they left.

Home Network Help

Previously I had written about how a colleague and I used Pair Debugging to solve a tricky problem our customer was encountering. It took a while and some thinking outside of the box to figure out what was going on. The software was trying to FTP some data files. The FTP failed. The software responded by deleting the files. The missing files was the problem that was reported.

We had to duplicate and debug the problem in a development environment. At some point we got to the point where we believed that if the FTP worked, the software would work correctly. However we had to prove to ourselves that this was the case and there was not anything else wrong with the software. There was only one problem with this plan. We did not have an FTP server with which we could test. This is because our customer, due to security concerns, has shut down FTP all across the enterprise. That included our development servers.

Since we were already operating "outside of the box", I reasoned that we should be able to set up our own FTP Server to do these tests. I am sure we were violating one or more security rules by doing this. However our prime directive was to solve a high priority customer problem. Sometimes you need to bend the rules a little bit to get an important job done. I told my colleague to do a Google search for "free FTP Server for Windows XP". Luckily we got a result for Home Network Help. They had a site which walked us through enabling the FTP Server that comes with Windows XP Professional. Thanks guys for helping us out when we were in a bind.

Pair Debugging

When I got in this morning, I had a number of voice mail messages from my boss. Then I found that I had a bunch on my cell phone too. That did not bode well. So I called him up. He said another team member went to the customer site to resolve a high priority problem. And he told me he wanted me there too.

I packed up my things and headed to the customer site. Luckily I got one of the last parking spaces in the lot. A coworker signed me in the front door. I found the guy I needed to help. And we got down to business. A number of our customers saw me there and wanted help with whatever they were working with. I tried to give them a little bit, but I needed to get busy on this problem. I called my boss and he talked to the top dog in the customer organization. We needed to be left alone to solve their most critical problem.

Me and my buddy traced the code to the one line in a Korn shell script that should have been created a file. But after running out program, no file was to be found. We added some debug statements and were baffled. The line should have been creating a file. There were no permissions problems. We were sure the code was getting executed. I told my buddy that although you would not expect it, perhaps the file was getting created but getting deleted later. We traced the program all the way through to completion. Wouldn't you know it? When an FTP action fails, the programs deletes the file. We recommended that the customer get their FTP server up and running. The instructed us to just remove the line of code that deletes the file so they could get on with their work immediately. Pair programming, or more correctly pair debugging, actually seemed to work well with my and my buddy.

Effective Communications

Today I got assigned two trouble tickets to work. By the time I got into work, one of them got reassigned to another developer. Early bird gets the work. Slacker gets out of some work. Before lunch I decided I had better get hot on the problem that was still assigned to me.

I immediately called the customer that had reported the problem. She gave me the additional details I needed to investigate further. When it looked like this was a real problem, I called the customer again to clarify the expected scope of the solution. Then I looked at the code and the requirements.

It became clear to me that the code was working fine per the documented requirements. It just seemed like there was a problem because there were certain situations where the code was supposed to do weird things. Once again I called the customer back and explained all this. I followed up with an e-mail showing the requirements that were being followed.

The best moral of this story is that you need to be proactive and unafraid to pick up the phone and call a customer. There have been too many times where I have seen other developers missing some crucial information from a problem that a customer was having. And these developers would, for one reason or another, e-mail somebody else on the team and say they did not have the information they needed. Don't e-mail anybody. Pick up the phone and give the customer a call.