Planning for the Future

We have a type of data in the system that used to only come in pairs. I guess at some point that changed so we might get up to 5 different records of this type. Now we need to change again to handle an unlimited number of records. I was tasked to find out what would happen if the change happened before we could update our software. Everyone thought the app would bomb. I was surprised when it handled multiple records with ease.

I did some investigation. There was a constant definining the maximum amount of records to be two. Why wasn't the system crashing? Wouldn't they be trying to access some memory or indexes that were out of bounds? Nope.

A close inspect of the code showed that it counts the number of records. Then it would retrieve the records, up to the maximum amount that it expected. The system just ignored all subsequent records. Nice. That's the way to design software. Plan for future expansion. And handle that expansion in a controlled way.

Power of Gamification

The leaders of my company wanted to see what all the workers think. We have a lot of employees in the company. So they hired an outside firm to set up an anonymous survey. They do these on a yearly basis. Last year there was a whopping 80%+ participation rate.

Here is the stickler. This is a long survey. And they want you to take it on your own time. That might work if you are chillin on your job. But me and my team are busy. I cannot justify spending any time on such a survey.

The local managers figured we were busy. So they cooked up some gamification techniques to encourage participation. They divided us up into teams. And they are pitting team against team. There is supposed to be a prize for the team that finishes the survey.

This gamification is encouraging some people to do the survey quick. They even try to get others on their team to do the survey too. I have a problem with this though. They said the winner will get some undisclosed prize. If you are going to wave a carrot in front of me, I need to know what the carrot is. Otherwise I will look a fool if I jump for some undisclosed prize.

I have some other ideas on how to motivate all employees to complete tasks such as this survey. But I will share those ideas at another time.

Multi Install Madness

I got back to work after a week long vacation. There was apparently a high priority problem with the rollout of our latest software. This was a major upgrade. However the uses expected to run the new and old versions of our software side by side on the same machine. Ummm I said I thought we did not support that. Apparently we we supposed to.

The problem was that every time you install our software, we uninstall any old copy that is already on the system. Normally that is the expected behavior. However the customer wants a specific version of the old software to stick around. The lead on my team decided that we wanted a multi-install capability turned on in our Installshield project.

Multi install sounded like a bad idea to me. Sure enough, the lead was having all kinds of trouble with it. In fact, he now had two problems. The customer's old versions were getting uninstalled. And he could not figure out how to get multi install to work in all scenarios.

So I backed the guy up. I told him the InstallShield and Windows theory is that a product knows what kind of product it is. And it we got it set up to remove all prior copies of itself. If you do not want to remove prior copies, you need to create a new product. For InstallShield, I had a hunch that this was some sort of unique string or number like a GUID that uniquely identified our product.

As soon as I led my team leader down that path, he found a Product GUID setting in InstallShield. With the click of a button, he was able to generate a new GUID and solve the customer problem. He backed out his multi install problem. The moral of the story is to first have a deep understanding of the problem. Then you can clearly see what it takes to resolve it.

The Rise of the Nomad

When I first started coding, I had an engineering degree. I learned how to solve problems in school. So it did not matter what work I was assigned. I had already learned how to figure new things out. No trouble.

Later I saw that developers specialized in languages and platforms. Back then Microsoft seemed hot. Therefore I learned the Microsoft stack. I became a Microsoft developer. My self proclaimed titled was a Windows Application Developer. Made for quite a few job opportunities.

When I started my current job, I got hired in as a Windows Application Developer. Perfect fit. But then I found that the database in use was Oracle. And our system is Oracle-heavy. No trouble. Remember that I am an engineer by training. I learned Oracle on the job. Even went and got Oracle certified.

Nowadays I don't seem to do as much Windows programming. It is mostly database development in Oracle. I thought I might need to morph into being an Oracle developer instead of a Microsoft developer. But lately I have been reading that it does not matter what stack you use. Your stack is not your value.

Patrick Kalzumeus says you should not even call yourself a programmer. And Andraž Bajt decribes the rise of the Nomad programmer. Time to sit back and think about my title in the work world.

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.

The PDF Experts

Amyuni is a Canadian company that are the self proclaimed PDF Experts. They have two main types of products. One is a PDF converter, which acts as a print driver to output to a document of type PDF. The other is a PDF creater. It allows you to generate new PDF documents from scratch.

Amyuni seems to get its name from founder Dave Amiouny. They have been in the PDF business for over 10 years. They claim to have the fastest PDF conversion in the business. Products that compete with them include Adobe Acrobat, Nuance Converter, and CutePDF Writer.

The company list a large number of clients who use their software. The company itself is small. Latest figures I could see show a total of 14 employees. They target .NET developers. Pricing listed on their website ranges from $1500 to $35,000 per year based on support levels. However I also saw their products on a download site going for a little over a hundred bucks.

SD Times Magazine lists Amyuni as a top contender in the Libraries & Frameworks categories. I was a bit troubled by some user comments I saw on a download site. Users claimed that PDFs created by Amyuni software would crash Adobe Acrobat. Users also complained that Amyuni software could not convert PDF documents to MS Word format. Disturbing.

Who is Accusoft?

Accusoft recently won an award in the SD Times winner's circle under the category Libraries & Frameworks. That is great and all. But who the heck is Accusoft? Well I did some research. They were previously called Pegasus Imaging. Then they changed their name to Accusoft Pegasus a few years back. Just this year they dropped the Pegasus and are known as Accusoft.

The company does a lot of things as they have acquired a number of companies in the past. They have solutions for the document, content, and imaging spaces. They sell apps and SDKs. In the imaging arena, their software can handle barcode and do OCR. They also handle image compression, scanning, and viewing of images.

This technology lends itself to forms processing. They can generate PDF documents. One of their products is PDF Xpress. It allows you to modify a PDF document, or extract portions of it. Althought the company is not large in terms of personnel, they recently did almost $20M in revenue for the year.

One cool thing about Accusoft is that they have product for the mobile market. They sell document scanner software that works on Android. You hook a USB scanner up to your tablet and you are good to go. Not sure if I really need to know about Accusoft. But if I get into the document scanning or imaging world, I may have to.

Winner's Circle

There was a supplement to the latest issue of Software Development Times magazine called the Winner's Circle. They picked a few categories and listed the top companies in each sector. I was a bit disturbed to find that I did not recognize many of the companies.

Take /n Software for instance. The name seemed a little familiar. But I had no clue what they did. They were one of the top picks in the "Libraries & Frameworks" category. I use some libraries at work. But they have been the same libraries for like the last ten years. I got to get out more.

I went over to the /n Software web site. It was not initially obvious what they were selling. Then I saw they had a line of IP*Works libraries. They help your app speak network protocols. Cool. They also have a bunch of Integrator libraries. These let you app easily communicate with systems such as PayPal or Amazon. Also sounds good.

Now I just got to research some more of these companies. Ever heard of Accusoft? Me neither. Time to get busy.

The Last Minute

There are times when I need to leave early from work. Usually I try to give as much advance notice as possible to the people on my team. However I have found that as soon as I need to leave, everybody needs my help at work. You would think I would just ignore them and go. But these slackers just don't realize they need something until after I an scheduled to leave. I have come up with a great plan for dealing with this.

I determine when I need to leave work. Then I schedule a departure from the office which is two hours or more before my actual exit deadline. As usual, I get all kinds of requests for assistance at the last minute. I tell people that I am scheduled to go. But I give them an extra minute or two of help. Sometimes those minutes last for up to an hour. Since I planned ahead, I am covered.

This is not quite optimal. It only encourages people to try to deter me at the last second. But I think about it this way. Do you know some people who are habitually late? If you want them on time, you make up a meeting time which is an hour before the actual time. You build in some slack. Well that is what I am doing at work.

Now let's hope nobody gets smart to my plan. Otherwise they might start intruding on my true deadline to get out of dodge.

Schedule Conflict

This is a good time of the year. We are in the coding phase of development. I love to code. There is one huge problem though. Everything is behind schedule. Our team is management heavy. We got a ton of senior managers on the staff. You would think that they could manage the schedule for us while we code away. Not the case here though.

I have been instructed to keep an eye on the schedule to ensure there are no errors. I especially pay attention to the due dates for tasks assigned to me or my team. This should be pretty simple. For every major change we code, I provide detailed high fidelity estimates for the work. You could just take those estimates and plug and chug the schedule.

The high fidelity estimates actually make my schedule review real easy. I look at the tasks and due dates on the schedule. Then I just do a quick calculation based on my estimates to see if they are in line. If they are not, I just raise up the concern, referencing my original estimates.

I figure my job is to alert everyone to any crazy schedule failures. That way there is no surprise when someone thinks that a task will finish when it is actually taking a whole lot more time. Obviously something is going to have to give. Most likely it will be a schedule change to reflect the reality of the development durations. I expect there to be some pain before this can be achieved though.

Pesky Memory Leaks

The team had a few cycles while the customer reviewed our latest design. One developer recalled some memory leaks that seemed to appear out of nowhere in our app. He showed them to me. The memory leaks appeared when we launched the app, logged in, logged out, and exited. That's a tiny amount of functionality. How could that cause a leak?

The developer did some research. We were all surprised at what he found. The character set had a value of "Use Multi-Byte Character Set". Ooops. We pretty much do single byte characters. You know, the old C-style strings. That wrong setting was causing memory leaks. Who knows what other problems this mismatch was causing.

This seemed strange. You get Unicode as the default setting when you create a project. Somebody must have changed that to MBCS. Why? Did they not know what this setting controlled? This is just disturbing. Time to look at the settings for all our Visual Studio projects. We really should have been detecting this earlier. Memory leaks are bad and need to be plugged.

Stack Ranking

I just heard about the term stack ranking today. The idea itself is not new. You rate your employees using a normal distribution. A few are top performers. Most are in the middle. And you have a few low performers. Seems legit to me. Isn't this how all reviews are kind of done anyway?

I would prefer that ratings be taken a bit further like they are at select companies. The bottom performers are periodically purged from the company. That might seem a bit radical. But you want to keep your top performers around and happy. It does not help when you keep dead wood on a project or even in the company.

I read an article by Vanity Fair where they interviewed a lot of Microsoft employees. Apparently Microsoft does not like stack ranking to evaluate employee performance. It pits developers against each other. Strange. You would think Microsoft developers would also want such a ranking. At my company, the only time relative rank comes into play is when they evaluate your pay raise. If you make a lot less than your peers, you get the opportunity to catch up during a pay modification.

InstallShield Woes

We used an ancient very of InstallShield for the longest time to manage our software installs. Just this year we upgraded to the latest version of InstallShield. Of course we had to rewrite our projects from scratch. In retrospect, the upgrade may not have been such a wise decision. Our customer requires "silent" installs. They cannot require any user input as the updates are pushed out to users over the network.

Installshield has the functionality to deal with silent installs. You create a response file to generate answers to the questions that are normally posed to the user. A developer has been recording his actions to generate this response file. However he has discovered that whenever he makes a change to the InstallShield project, the response files become invalidated. He need to go back and recreate the response files.

The developer in charge of this is tearing his hair out because of this. I joked that we might need to create a program that automatically regenerates the response file every time the InstallShield project is touched. Feels like two levels of indirection.

My developer colleague thinks that the InstallShield objects have a unique GUID that is regnerated every time you mess with the project. He further believes that the response file data is tied to a specific GUID. If that is the case, this is indeed pure insanity.

Visual Studio 11

The Visual Studio 11 release candidate has been announced over on the Visual Studio blog. This is relevant to me since we are just upgrading to Visual Studio 9 at work. Visual Studio 11 is also known as Visual Studio 2012. At work we are moving to Visual Studio 2008. That Microsoft is at a release candidate means the Beta is coming to an end. They are getting close to shipping.

Strangely enough, I had to go to Jason Zander's blog to find out the details on the VS11 release. Wouldn't you think the feature list might be a good thing to post on the Visual Studio blog? LOL. Anyway, Zander goes through what made it into this release candidate.

They got the .NET framework 4.5. Visual Studio also has a new logo which people are complaining about. There is something called a "dark theme". No clue what the hell that means. Details please. Microsoft eliminated some of the menu bulk the solution explorer. Thank you.

Of course VS11 supports Metro (Windows 8). They got templates to support Metro apps. The also have the Entity Framework 5. Maybe I will provide more on that later. They have added Intellisense for HTML 5. Very good. Finally the release candidate will provide a "go live" license allowing you to create production code from it.

Unfortunately it might be a few years before we upgrade to Visual Studio 11 at my work. Might be as long as three or four years. We trail the cutting edge to protect agaisnt bleeding.

Task Estimates

We had an iteration to upgrade some tools for our software. Went to a new Oracle client. Moved to Visual Studio 2008. Got a big jump in the Installshield version we were using. And moved up a version or two with InstallShield. We converted a lot of the projects. Then we headed into unit testing. The suits wanted a detailed breakdown of the work. The team lead broke the items down into modules. He used a rough estimate of one hour per module. Turns out that estimate was nowhere near accurate.

Now we are behind schedule. We have two problems. The unit testing is not close to being complete. And management wants a more detailed schedule. Adding more fidelity to the schedule might increase insight into the work being done. But it won't make us finish any quicker. We actually have to spend time to work on the schedule now. I layed out the two big challenges: (1) a bad set of initial estimates, and (2) surprise problems coming up during unit testing. No amount of high quality estimates are going to protect us against surprises.

Managers seem to only know about schedules. But they cannot generate the schedules. They need developers to do that. This is a catch-22. We need to finish up unit testing. That takes developer effort and resources. Now we need to manage the management who want to thelp. Their help is limited to assigning us more tasks that deal with the schedule. Feels like we are getting help we did not ask for. And that help isn't helping. It is hurting. Nothing new here through, right?

The Way to Woo

My company has some significant benefits. They pay me a large salary. On top of that, they drop a huge chunk of change into my 401k each year. They do that regardless of whether I contribute. My retirement is looking good for now. The company also has money and time allotted each year for my training. That is nice. I just have to arrange the time off from my project. The costs and pay are already arranged. You got to love that. These benefits help keep me on the job. There may be things wrong with the position and company. Benefits are right.

A lot of times I think that I have some golden handcuffs keeping me at my company. Other jobs would be too much of a cut in pay or benefits to even consider. Then the other day I spotted a job listing that made me think a bit. They offered what the called Rock Star benefits. They will take care of the full cost of medical insurance. Nice. Their education budget was three times what my company offers. This is unheard of until now. They also give a lot more vacation than my company. What the heck?

Then I saw what the hubbub was all about. This company needed people with high level Department of Defense security clearances. Those developers are hard to come by. They make their companies good money and very profitable. They are limited in number. Someone has to have already taken the time and paid for their security clearance. I wonder if my good friend who has such a clearance is ready for this high life? I am ready but not qualified. Damn.

Rise of the 501 Developer

I recently starting seeing some noise about a 501 developer. What the heck is that? I tried to ignore it. But there were too many posts about it. Finally my curiosity got the bes tof me. I come to find that a 501 developer is one who leaves work at exactly 5:01pm. They don't stay late to do more work or help the team.


The 501 developer idea is deeper than that. 501 developers do not go home and continue to code, doing things such as contributing to open source projects or write about software development. The implication is that being a 501 developer is a bad thing.

Now I don't consider myself to be a 501 developer. But I wouldn't mind being one. Who wants to stay at work late? Not me. Not unless I am working on my own startup where my work might make me rich. That is not going to happen when you work for the man.

I have met plenty of 501 developers in my career. They have other priorities. Development is just the day job that pays the bills for them. That is not a bad attitude to have. This helps you from being exploited on death march style projects. You also don't waste time at work and lower your effective hourly wage by working extra hours. Those developers may be the smart ones after all.

Thread Commander

I read an article about the latest ideas for business cards titles. Some were fun like recusionist, multicore general, or daemonologist. Looks like the old rock star moniker is long out of style. The best title I saw in the list was Thread Commander.

Now I would hesitate to use Thread Commander unless you are in full control of multithreaded programming. You would hate for someone to see that title and find you don't know the difference between a mutex and semaphore. Time to brush up on the old multithreaded processing. Better yet, I should already be doing multithreaded programming. We use it on our systems at work. But once they are in place, you don't get into the details often.

I probably should have some side projects that are massively multithreaded. Next I will have to convince the powers that be that I deserve to have Thread Commander on my business cards. It was a chore to make such a business case last time I ordered business cards. Or I could go the east route - just buy my own business cards with whatever title I like

Vacation is all I Ever Wanted

I like taking vacations to recharge from the hectic life at work. In the past, I have found it difficult to schedule a week off. I would call my boss requesting time off. He would tell me to give him a week. A week later I inquire about my vacation, and he acts like this is the first he has ever heard about it. He asks for a week to think about it. Then a week later, he says he needs a week to think about it.

That cycle got old after the first week. This is a problem that needs to be solved. Perhaps I am getting ignored because my boss is too busy. Simple. Now I call up my boss, follow up with an email, and state that if there are any problems let me know within a week. Then I also state that if I don't hear back within a week, I will consider the vacation approved. Works every time.

Now there is one more caveat to this techinqiue. I cannot be irresponsible. I must ensure there is coverage for my absense. However I wait until my last day at work before the vacation. At that point I remind everyone that I am going on vacation the following week. There is usually a mad dash to get information from me. There are also cries about how I am an essential employee, and that it is a bad time to take vacation. The sad thing is that this happens every time I take vacation. So I cannot be too bothered by it.

The good news is that I am taking next week off from work. So today there are people crying about how we have so much to do next week. Not my problem. I already got my vacation approved. I just try to focus on the main things I need to get done before the day is out. I will be on the beach by Monday.

Poor Performance

I needed to duplicate a strange problem in our application. It involved large volumes. So I wrote a script to simulate 17k records. My first test hung the app. After 4 or 5 hours, I gave up. Me and my boss split the work between us. I handled the database optimization, and he took care of the stuff in the app.

The database piece turned out to be terribly inefficient code in one of the database triggers. I was surprised at some of the findings in the app. One problem was the sorting of the records. This used a bubble sort implemented by a developer no longer on the team. Turns out he ran the bubble sort on the data twice in order to sort by two columns. That was just too slow. Who doesn't use quicksort these days?

Another issue was the population of our spreadsheet. This is accomplished by adding data one cell at a time. At 17k rows by about 10 columns, you know we are in trouble. We might be capped because we are using a third party spreadsheet. I got to think there is a way to bulk load up large spreadsheets. I hope when we put all our speedups together, this 17k records loads in no time at all.

Visual Studio and HTML

I have been having a problem editing HTML files with Visual Studio. This happened on my work and home laptops. I knew this must be a configuration issue since I just reinstalled Visual Studio 2010 Professional on my home machine. Every time I open an HTML file with Visual Studio, I get a blank page. What the heck? Opening the same file renamed to a ".txt" file works fine.

I tried setting some options. That was no help. Then I started playing with the File Open dialog. With the HTML file selected, I clicked the drop down box on the Open button. Then I chose the "Open with..." submenu. The HTML Editor was the default program used to open HTML files. That must have been the fail. As soon as I selected and made the Source Code Editor the default program for HTML files, I can now see my code.

The strange thing was that when I googled for solutions to this problem, I got no help. Sometimes you got to get in there yourself and do some hacking to get your tools to work correctly. I still think Visual Studio should be able to edit HTML text straight out of the box without any such hacking.

Management Not Helping

We had a trouble ticket come in the other day. It did not get immediately worked as the development team was busy. The customer upped the priority of the ticket. A manager asked me for some insight on how we could work this ticket. I said the functionality was one that was complex and not familiar to most of development. So I put down some estimates on how long it would take a developer to get familiar with the functions, how long it would take to ramp upu some test data, and how long it would take to replicate the problem.

I thought that was good enough. Later the same manager said we should go ahead with the investigation. What? I figured he might be confused. So I emailed him with the list of other high priority issues I was working. I told him I would work the new one when I finished the other high priority problems. Again I thought that would be the end of the issue.

Next I get some questions from the manager inquiring whether anything had changed since last year. I said that there was a higher volume of data. That statement confused another manager on the email chain. He wondered when we deployed this "higher volume". Then the first manager piped in saying he thought an entire redesign was in order here. Huh?

All of a sudden, all kinds of managers are brainstorming ideas on how to do a redesign. Some of the ideas are downright wacky. Luckily none of this conjecture is being sent to the customer. Eventually we find a new guy to start getting familiar with the code. Finally someone is starting some real work on the problem that will actually result in a fix. Crazy i tell ya.

Tiger Team Without the Bite

Last year we had some bad performance problems in our system. The users decided to turn on some functionality which delay processing until night. It was a valid work around. But it did not cure the root cause of the problems. This year there was a worry that the problems would come back. So the big boss put together a tiger team to attack the problem. He chose one of the new members of our team to represent us in the tiger team.

There was one big problem with this plan. Our system is complex. No matter how competant a developer you are, it just takes time to learn the ropes. The new developer from our team attended the tiger team meetings. However she just ended up confused. She asked me and our team lead for help. I was chosen to assist.

The new developer provided a document that listed ideas from a recent brainstorming session that the tiger team had. The new developer could read the words from the document. But it was all Greek to her. I defined some of the key terms. Then I tried to paint the big picture of what the tiger team was kicking around.

Today our new developer is tasked with producing a proposal for changes to our apps in order to alleviate performance problems. Good luck. For grins I got sent a copy of the proposal. I knew we were in trouble when the main app names from our suite were mispelled. Ouch.

My team lead thought we could come in and rescue this effort. I advised against it. This thing is going to need to fail hard before people in charge understand that you just can't throw new resources at a tough problem and expect much good to come from it.

Logical Deduction Flaws

My team got some trouble tickets from the customer. The team lead assigned a high priority problem to me. I studied the error messages. Then I took a look at the code. I deduced that if all was set up correctly, there was only one way these errors could occur. I sent directions to the customer on how to reconfigure to avoid the error. Then I got tasked with helping out another team.

My recommendations were met with a lot of resistance from the customer. They questioned my logic. And they were not happy with my recommendations. The top manager from the customer organization asked me to investigate further. Then the top manager from my company told me to get busy on this.

Luckily I had finished helping that other team. I decided to not take on any other work while I worked this top priority problem. I looked deeply at the examples from the customer. I traced each SQL statement with the data from the production database. That's when I spotted some bed setup data.

My failure was that I assumed all the setup data was correct. Incorrect assumption. I also did not spend enough time on analysis because I was busy. Error number two. Now armed with the full picture, I can address the customer problem. Although they were unhappy with my first attempt, I am sure they will be relieved when I correct the underlying problems.

Trouble with Changes

Today our customer reported a few high priority problems with our apps. My team lead had me look at one of them. Based on some business knowledge, alone with some screen shots of the error, I figured it out. After that I thought I deserved a lunch.

After I picked up some take out, I found that a meeting was called to talk about the trouble ticket assignments. I thought I was safe because I knocked out a problem in record time. Nope. A guy on another team was having a hard time and needed help. I wanted to talk with him. But he was stuck in meetings all afternoon. I went with the one email he was able to send out.

I tracked down the processing that had occurred on the data. There was a lot of processing that looked missing. That was a good data point. I traced back the properties of the data and found out we were not supposed to do any processing due to some initial requirements. After I talked with the developer needing help, I found there were more examples of the problems.

I analyzed the data and confirmed we erroneously skipped some processing. At first my findings matched those of the developer. There was no way the code was going to skip this stuff. Then I recalled helping another developer on this team. He had some code that was loading variables in the wrong order. He fixed the code, but not clean up the data. The fix was also late to make it into production. Ouch.

Once I explained the history of the code changes, the light came on in the developer's mind. He said this explanation matched some other weird errors that got logged. I am thankful I knew about the work of the other developer (who has since left the company). Sometimes a little knowledge of past work goes a long way in bug tracking.

Virtual Desktop Conundrum

Last year I needed an upgrade of my Rational Tools Suite. The system administrator who did the upgrade was unable to complete the task. I asked him to try again. He could not get the new software installed. I then asked him to escalate the problem to IBM. No dice.

My virtual desktop was without Rational Tools. Ouch. The system administrator recommended he redo the whole virtual desktop from scratch. Seeing how I just lost my Rational Tools, I decided against that. I did have one other virtual desktop that had the right version of the Rational Tool Suite. With the two virtual desktops, I am still able to do my job.

The plan from my manager was to get a new virtual desktop with all the software installed. A member of the customer organization was to get me the new desktop. Well eventually I got it. But nobody was scheduled to install all the software. Eventually somebody called to see if the trouble ticket to get my new desktop could be closed. No way. I don't have a working machine. Now my team lead has to sort through this mess. Oh boy.