Priority Order

I remember it was 7 or 8 years ago. There was going to be a new system designed to replace the current one we supported. So we were a bit more ambitious rolling out the last upgrades to the system. In retrospect, we pushed some things out too early. That meant a number of things were broken in Production. Not a good place to be at.

Somehow I rose up to lead the team. I figured that my job was to coach the green developers. And I would try to protect them from the crazy antics of management who thought they knew better. We were busy. I figure we were working around 50 hours a week. I did my best to keep morale up. After polling the developers, I went out and bought food they liked. Hey. I was not a saint. I billed the company. But I made sure we had some nice food to eat.

One of the developers figured out this job was not for him. So he put in his two weeks notice. The managers asked me to help him wrap up what he was working on. I had a good rapport with all the developers. This one developer who was leaving confessed that since he was quitting anyway, he was just going to slack off during his last 2 weeks of work. Fair enough.

The thing that was disappointing was that this guy was really excited about his blog. And he wanted to see if I would read his blogging. I was busy trying to keep some disasters managed as best I could. And I was still on the ship that was rocking. The last thing I needed to do was read blog posts from a deoparting slacker. But I knew diplomacy. I let the guy know that I was a bit busy at the moment. So blog reading would have to wait for less busy times.

I never did check out his blog. Can't blame the guy for leaving a challenging work environment. But then again, I can't imagine he had much worthwhile to say in his blog.

Microsoft Controls

Our project currently uses Microsoft Visual Studio 2008 to do the development. Previously we used VS 2005. And before that we used VS6. Right now I am trying to bring up one of our large dialogs in the resource editor. I get an error message that "4 Active X controls could not be instantiated. Reinstall or register the controls and try again."

Okay. I have the OCX files. I register the controls. Actually it is one control - the Microsoft FlexGrid. God knows why were are using it. But I register the control. Still get the error in Visual Studio. Come on Microsoft. These are your own controls. And I had our customer buy your Visual Studio. That cost some big bucks.

Well I google around. And I figure out what the problem is. These are VB6 controls from way back when. Visual Studio 2008 does not by default install licenses to use VB6 controls. Go figure. Microsoft's knowledge bases tells me to either (1) intall VB6 on my machine, or (2) find some hack on my VS2008 install media to update my registry.

I guess the real message that Microsoft is trying to send is for us to stop using the VB6 controls. Otherwise they will make it hard for developers to use them. Hey I would love to fool around and find the latest .NET controls and put them in our application. But my customer has real business needs that need to be solved. They don't want me wasting time updating controls that have no positive business impact to our system. Darn you Microsoft.

Environmental Caution

Our system keeps some slow changing values in environment variables. This works out okay. Normally we only changes these about once a year. Sometimes we need to make changes to some of these environment. I had to do so this week. But I had some troubles. My builds kept using the old values that were set. Then it dawned on me. Visual Studio must be caching the environment variables on load.

So you need to exit Visual Studio and restart it for it to pick up environment variable changes. Perhaps storing state in environment variables is not such a good idea. We could stash this stuff in the registry. Changes in the registry are immediately available to anyone who accesses the registry. We actually use the registry for a bit of run-time values in our app.

The Boy Who Cried Wolf

I work on a piece of our system which is very complex. It consists of back end processing. So you just can't launch a GUI and start clicking around. There was a new guy assigned to test changes to this complex system. Obviously he has a lot of work to do. I had a few sessions with him to give him the overview of the system. Then I provided him access to a lot of documentation on the system. I also told him he would need to play with each of the main jobs to get a feel for how things worked.

Today I went out to get some lunch. When I got back, there were a flurry of emails from this tester. He said he used a test file to mock up some data for one of the processes. He ran the job to process the data, but nothing was happening. In the final email, he stated that this was a work stoppage.

A kind DBA took a look at the situation while I was gone. Turns out the process was waiting for the input file. I did a dive in, and found the data file was named wrong. I provided the correct name. I also specified the directory the file needed to be in, just in case. This got the tester past the problem.

Hey. I get that things will be tough if you are new. But don't sound the alarm that there is a work stoppage if you don't know what you are doing. That will only end up badly for you.

Next I find another email from the tester. He is trying to reconcile the results of the now successful job with another report. The problem is that the report has nothing to do with the process at hand. I send a quick reply back. In the reply, I stick to the facts. However I make it abundantly clear that the connections the tester is trying to make are not based in reality.

You Got to Believe

We had a number of changes to make to our system recently. Once of the changes was still in a state of flux when we completed gathering the requirements. So it was delayed a bit. All of a sudden we needed to create a design for this change. The design work got sent to me. I was told to spend a day banging out a design. This was a large change. There was no way the design would be complete in a day.

I spent almost a week putting together a design for the change. For the items I knew I would code myself, I skipped over all the detail. I completed around 90% of the design for the rest of the system. Some of the items were put together quickly. But I mapped everything out and provided almost all the details.

Then it came time to code up the changes. This is supposed to be the fun part. I went to town writing the part of the code assigned to me. I spent most of the time testing out my changes. This was a part of the system that requires a lot of complex test data to vet. Another developer worked on most of the other changes. He called me up with some questions about the design. I explained everything to him. He seemed good.

Towards the end of the design, the developer working on the code came to me and said he could not get some of the data to turn out correctly. I recommended he dig into the code and find out why things were going awry. The developer later came back and asked me if he could just hack some code onto the end of the process. Now I am just a peer of this guy. But since he was coming to me for advice, I recommended he trace the code from beginning to end and understanding why the result were going wrong.

Later I get many emails and calls from this developer. He traced the reason for the problems. And he was asking me what to do. This is very disturbing. The guy isn't a newbie from out of school. He is an older developer that has a Ph D in Computer Science. I give him some quick ideas on how things should work and send him off. He comes back to me and tells me things are not working as I had explained. Fine. I took a deep dive and found that things were indeed more complicated than I thought. So I provided some advice on how to proceed.

A week later I get more more questions from this guy on what to do. We are in a crunch. But I still tell the guy how one would figure this out. He proceeds to do so. But he still comes back to me to report his findings and ask me if what he did is correct. I got to figure out how to coach this guy. Perhaps he is afraid of failure. Or perhaps he knows he is going to fail and needs someone to assign blame. I don't know. I need to find out. I can't keep on doing his job and mine. No time for that.

The Requirements

I am taking an advanced JavaScript programming class at the local community college. Last week we had our first quiz. It was really a test in disguise. Who ever heard of a two hour long quiz? There were just four problems. Three out of the four were easy. The fourth one was a kiler.

The instructor told us we could read over the quiz and ask questions in the first 15 minutes of the quiz. I read through all the questions. The hard problem was a use case for a whole program. There were some sentences that made no sense. There were ambiguous requirements in there. There were also some conflicting requirements. So I had a lot of question.

In the end, I determined that the instructor was just checking whether the students were able to discern the loose nature of the quiz question. He answsers to my questions pretty much told me he did not care what assumptions I made. In the end I really liked this quiz question.

My technique to solve the questions was to get a prototype up and running really quickly. The prototype just had a button that added text to a list on the web page. It worked. Then I slowly started adding functionality. I tested my code during each step. That ensured that I could turn in a working product even if I did not finish. In the end, I finished early.

Avoid Duplication

The customer needed some sweeping changes in our system. Happens all the time. However we were busy with all kinds of other changes. So schedules were tight. The project manager said we would put these new changes on hold. That way we could finish our current changes and address the new ones in due time. Worked for me.

Then our project manager went on vacation for a whopping month. The deputy project manager took over. He must not have got the memo. Or he did and ignored it. All of a sudden, we were on the hook for all these new changes. This new manager told me to knock out the design in a day or so. I informed him there was no way that was going to happen. We had costed the effort. Design was a long term effort. But I spent about a week and knocked something out.

There was also a rushed review with the customer. Turns out not all of my design documentation was sent to the customer for review. Never mind that. I was apparently late for coding. Then I started doing some coding. Finally I had to call shennanigans. This was just not how things could work. I escalated up the problems, and got some time to do the design. There was gnashing of teeth, but the schedule got extended to do design.

I ended up with an accelerated coding phase. And then the design walk through with the customer happened right about when I was finishing coding. So much for dependencies and the good old waterfall method. Then guess what? Not all of my documentation got sent to the customer. This was starting to sound like a bad movie. More on this later.