Release Planning

My manager told me the project's release manager wanted me to attend a meeting. They were trying to determine what the contents of the next major software release would be. That sounded good to me.

A VIP from the customer organization seemed to be driving the meeting. He was pitching the release to the business customers. I was not sure why I was invited to such a meeting.

We took a break. I called up the release manager. I asked him whether we would be able to get down to the requirements details in meeting. He said the requirements had been gathered. I explained that although somebody wrote down some requirements specifications, we still did not know exactly what the customer wanted.

I gave the manager a prime example. Then I posed some questions related to the sample requirements. He said the requirements manager was in the room with him. Of course she could not answer the question I had posed. Then I informed the release manager that there were a lot of requirements like that. Nobody knows the details yet. We can't plan until we know what it is that we are supposed to deliver. In the end, the meeting was adjourned before my questions could be answered. Translation - I got to attend some future meetings. Not good.

The Work Around

Our team lead is on a very long vacation. While he is gone, I am in charge. My first speech came during a team meeting. I let everyone know that I like to run things differently. There will be some good planning. And I will be pushing back on management and customers to ensure we don't work nights and weekends.

There was silence after my speech during the meeting. However there was quite a commotion following it. One other team lead came up and hugged me. She and her team put in crazy hours. I got a bunch of phone calls too. Seems like this effort was long overdue.

The true test came this week. Our customer had a big problem. I did the research myself on it. Then I planned out how we would resolve the problem. I provided a schedule for code, test, and roll out. It immediately came under fire. I was told big customers want this thing fixed. That's when I said I would be doing the fix personally. However I needed to work a normal schedule doing it. Furthermore I wanted to set a pattern for how we would do future fixes as well. Allow enough time to get the job done right.

Today was when the decision was going to be made. A VIP from our company asked to see me in his office. He wanted to know the details of the customer problem. I had all the information and more at my fingertips. Then he asked whether we could provide the customer some work around. I spoke at length about the work around our customer would like. Then he agreed to my plan of normal work schedules and software deliveries. I hurried up and pitched the work around to our main customer sponsor. The project manager loved my ideas. I think we are just about there selling this new style of leadership.

Netbooks Finale

This is my last installment on the topic of netbooks. Although it is not my choice, you have the option to install Linux as your operating system. The most popular edition or distribution of Linux is Ubuntu.

There are a number of accessories you can use with your netbook to make it easier. You should get a mouse. It can be a normal one, or better yet a Bluetooth mouse to skip the wires. There is a VGA port on the netbook that allows you to connect an external monitor. Be warned that this will be your second screen, not a replacement for the small screen that comes with the netbook.

The killer app for netbooks is Microsoft Office. You should minimize the ribbon if you are working with Microsoft Office 2007. You do this by clicking the small black box at the top of the screen. It will give you back a lot of screen real estate which is crucial on the small screen netbook. You can install Office on the netbook, or try the web version called Office Live.

There are alternatives to Microsoft Office that are compatible with the file formats. One example is ThinkFree which costs $50. A free alternative is OpenOffice. Google has an online alternative called Google Docs which is also free of charge.

You can use a small Outlook Express on your netbook to do email. However it it probably better to use a web mail site like Gmail to handle your email needs. The netbook keyboard can be small. But if you choose the 10 inch screen model, the keyboard will be almost as big as a laptop keyboard. When typing on a netbook, you should prop the thing up if you hold it on your lap. Use a book or pillow to do the job.

If I do purchase a netbook, I will share my hands on experience with you in the future.

Netbooks Continued

Today I continue my posts about netbooks. Like any PC, the netbook needs a drive for storage. You have three types of options here. You can get a hard drives which has a lot of space, is cheap, and is fast. An alternative is a solid state drive, which is similar to a flash drive. Finally there are hybrid drives which are a mix of hard and solid state drive properties.

It is possible to build your own netbook. You can go to a netbook seller and customize the options you want in your netbook as you would with a laptop or desktop PC. The amount of memory (RAM) required in a netbook is a point of debate. If you choose Linux for your operating system, you might be fine with 512MB RAM. However Windows XP will work better with 1GB.

Netbooks do not come with built in CD-ROM drives. If you need access to one, you can get an external one. Netbooks usually come with WiFi network support built in. However be warned that many models have a button you must push to turn the WiFi on. Netbooks are good in that they usually do not have the load of troubling preinstalled programs when you get them.
If you want to transfer files to your netbook, it is best to use a USB drive. Or you could use an external hard drive. Finally you can map a network drive to copy files as well. There is a Files and Settings Transfer Wizards to assist with big transfers. Note that this tool cannot move programs to your netbook. It only works with computer files.

You should get a second battery for your netbook. The thing weighs just three pounds. But its battery life is limited between charges. When you opt for the Windows XP operating system option, you normally get Windows XP Home Edition (as opposed to Windows XP Professional). Since there is no CD-ROM, you can choose instead to install many programs directly from the web. Or you could access a CD-ROM that is attached to the network.

I got a little more to say about netbooks. Look for my next post to wrap this subject up.


My desktop PC is getting a bit old. It is time to start thinking about its replacement. I might be interested in getting a laptop. It would be nice to be mobile with my computer. Recently I have seen cheap netbooks for sale. What exactly is a netbook? They seem small. I suspected it might be some type of marketing ploy to sell me a cell phone on steroids. So I decided to do some research.

Luckily my local library had a book that claimed to be the missing manual for netbooks. The book was published by O’Reilly. So I figured it was a good a source as any. It describes netbooks as being ultra portable. They are also economical. For example, one might cost $1000 less than a notebook. A netbook is good for email and browsing.

The screen on a netbook is typically between 7 and 10 inches. They have different processors which save power. There is no DVD or CD-ROM drives in them. The most common operating systems on them are Windows XP or Linux. I personally prefer Windows XP over the other Windows versions. This might be a big plus for me.

The most common CPU for a netbook is the Intel Atom chip. An alternative is the VIA Nano. The netbook keyboard is typically 85% the size of a laptop keyboard. There are a couple battery options. A 3-cell battery can keep you running for up to two hours. A 9-cell battery lasts for up to seven hours.

I read a lot more about netbooks. Be on the lookout for future posts on the subject.

Hands On Pair Programming

Pair programming is getting common. However it means different things to different people. In general, you sit two programmers side by side at one computer. One types in code and is called the driver. The other watches and is called the navigator. They work closely together. This arrangement does not guarantee success.

Programmers often get stuck. Talking to another developer can get past such a hurdle. Probing questions help you work through a problem. It helps your brain make breakthroughs. It is best if the questioner is an expert. They ask more probing questions that get you going.

Two people detect bugs better than just one. If you are not busy typing at the keyboard, you tend to notice problems faster. Fresh eyes often spot problems quickly. However pair programming loses its advantage if the same two people pair all the time. The fix is to swap pair programming partners often.

When you pair program, you do not want to let your partner down. Therefore you do your best. Your partner also keeps you honest. It is difficult to hack around if somebody is watching your moves. Instead you will take the time to fully understand an issue before coding.

I have done some pair programming in the past. For the most part, I found that it helped some programmers. However I find that I am more productive when I work alone. This might be a personal preference. I don’t look down on the practice. I just choose to avoid it.

Configuration Management

Recently I delivered a new version of an application. I tested it by cloning Production data into my development environment. Then I sent the new application out. Another developer peer reviewed the new app. The app would not work in his development schema. It also did not work for our internal testers.

I had committed to a quick release of this application. These testing problems prevented a release. So it was time for me to intervene. The application depends on the database being in a certain state. My own development database was correct. So was production. But the test database was out of sync.

I figured that production gets data when we release database changes to them. So I poured through the database releases from the last year. I found the release that populated the expected records. It apparently had not been run in the test database.

Since the customer needed my fix quickly, I reverse engineered the good database release. A tester acted as a DBA while I gave him directions to bring his database up to date. After that my application changes worked fine.

This turned out to be a database configuration management problem. We need the test database to mimic production. This is a process level problem that needs fixing now. Otherwise I will be back debugging the test environment soon.

Morale Buster

Our team was trying to implement a redesign of our entire system. This was a lot of work. The schedule was ridiculously short. People started the death march to oblivion. We were not going to ever deliver this system. Most people quit. A consultant suggested that a contest be held to improve morale. The project manager agreed.

The contest was a challenge to find the most expressions of data in our database. Since I had been on the project for a long time, I was able to enter and win the contest. The prize was supposed to be $50. The project manager gave me a paper IOU instead.

The IOU was not paid in a timely fashion. So I posted it up on the wall. I frequently get a lot of visitors to my cubicle. Most saw the IOU and knew I had been stiffed by the project manager. They cursed him. I laughed because it had become a bit of a joke to me.

During my last week at the company, the same project manager saw my IOU and paid me in cash. By then the damage had already been done to his name. I harbored no ill feelings toward him. I had already written him and the IOU off. It is no surprise that the project and the contest were both utter failures.

Trial Failure

I read that Abobe has a product called Adobe Photoshop Elements. It has a scaled down Adobe Photoshop feature set. It costs only fifty bucks. I checked it out. The latest version actually goes for $79. But it still might be a bargain.

I scoured the web for products reviews. They were mixed. Then I found a free 30-day trial download from Adobe. Yes. I clicked through and had to create an account with Adobe. Then I had to install Akamai’s Download Manager. Finally the download started.

Things were looking good until I got an error message stating “The server returned an error”. I am a customer trying to download your software. And you bomb on download? Fail. I am willing to follow through. I am trying to contact Adobe as we speak. Let’s see how that goes.

Complexities of the PDF Format

Our team rewrote all our reports this past year. We used to use a heavy Oracle reports client. However we ended up converting that code to C++ and stored procedures. We briefly considered using the PDF format for output. However we ended up choosing Microsoft Word format instead. One reason for this decision was the difficulty in producing PDF documents.

PDF is an important format for businesses. It became an ISO standard in 2009. The PDF specification has changed significantly over the years. A few years back the changes broke backward compatibility. There are files out there using many different versions of the PDF specification. Most do not use functionality from the latest version of the PDF spec.

The PDF specification is complicated. PDF file generation is not an easy. It is very difficult to create a PDF in a single pass. There are tool kits that assist with PDF file creation. Some tool kits are free. Developers need to know pagination to do PDF file generation.

There are multiple new PDF standards coming up in the near future. PDF/E is a standard for storing complex engineering documents. PDF/A is a stripped down version used for archiving. PDF/E-2 builds upon PDF/A, adding support for 3D objects. And PDF/UA allows documents to be read by screen readers. This enables persons with disabilities to read PDF documents.

I wish our team would have had the chance to use PDF on our project. Maybe next time.

Design Patterns for Dummies

I decided to read up on design patterns. However I did not read the Gang of Four (GoF) book. I read Design Patterns for Dummies instead. A design pattern is a solution to a problem. There are 23 standard design patterns. They are documented in the GoF book.

You should not add unneeded layers of abstraction in your design. There is no need to memorize patterns. You must understand object oriented programming (OOP) first. Then you can move on to understand design patterns.

Design patterns make maintenance easier. Inheritance does not handle functionality changes well. Inheritance spreads functionality out over many classes. The “has a” method let’s you switch algorithms at run time. Algorithm is another word for a strategy.

You should employ the Principle of Least Knowledge when designing your classes. Objects should not need to know too much about each other. We call this loose coupling. And loose coupling produces effective encapsulation.

Feel free to create your own design patterns. You should use your pattern in at least three applications before trying to share it with others. This is the Rule of Three in effect. Your homegrown pattern should make solutions easier to create.

The Dip on the Job

I have been reading a book by Seth Godin called The Dip. He talks about how fun it is to start a new job. However after a while you encounter "The Dip". This is where most people will give up and quit. You have to be something special to persevere and make it past this dip. Only then will you will reap the really big rewards. I have been trying to put this outlook into perspective in my at my own job.
This is my tenth year on my current project. I think it is safe to say I have long passed the dip. Sure enough the job was exciting when I first arrived. I was able to put my experience to use as soon as I joined the project. There was a lot of Oracle database technology to learn. And the business domain was complex and interesting.

Like most good things, the fun came to an end. There were some consults on the project that were a total pain. And I had to work for some managers who were no fun at all. The company started laying a lot of people off the project. That was the first time I contemplated leaving the project. It was not the last.

Later I somehow got voted to lead the team. The customer was irate. I had to spend my life researching all the problems the customer was reporting. I would meet a few times a day to give status updates to an irate project manager from the customer organization. The managers in my company fed me to the wolves. I dug in and gave the customer what he wanted. I also had to get my team to work every weekend. Still I stuck it through.

Then came the time when some new consultants got us on a quest to redesign the system. That was a few years of disaster. On the final year of the redesign, we were nowhere close to finishing. So we worked the death march. I was too tired to think about quitting. I spent 4 hours a day in status meetings, and another 8 hours a day doing development. This went on seven days a week until the redesign was canceled. I made it through with only a few others. We now hold the keys to the kingdom.

Sucky Software

There are many problems with software. It is hard to use. Software can also be unsafe and unreliable. What is a user to do? Stand up for your rights. You pay for software. Make developers earn their pay.

Bad software is caused by two main problems – programmer deficiencies and user actions. Programmers often do not know their customers. They have weak user interface design skills. They also don’t know how to do web programming.

Security is a major weakness for programmers. They just don’t know security well enough to produce solid code. Programmers rely on cool new technologies instead of tried and true techniques. Couple that with users who do not secure their machines. The result is chaos.

Not all software sucks. Google is good at user interfaces. Their software is mainly available on the web. Microsoft also has some good software. They handle auto updates well. That leads me to some things users can do to improve software quality. They should turn on automatic updates.

Programmers need to change to produce good software. They must conduct usability testing. This includes testing of web sites. Make it easy for users to provide feedback. Let users choose whatever ID and password they want. Just don’t display the password in plain text.

Users are not blameless in the software debacle. They must demand better software. Help developers by reporting bugs and participating in beta releases. Call up customer service if you encounter problems. Vote with your wallet. If software sucks, don’t buy it. Conduct research before you buy software. Check out the reviews. If software sucks, let the world know.

Schedule to Win it

My team lead told me we needed to release some fixes this week. He asked me how many of the 4 that were assigned to me could go out. I was only sure that 2 would make it. That is all I committed to. My team lead asked me if I could squeeze the other 2 in. I said no.

Then I asked my team lead who was putting together the release. He said I was responsible. All I needed was a due date and time. Then my team lead mentioned that there were some other fixes to go in as well.

I called up the other developers. Then I gave them a cutoff time. My team lead later tried to negotiate a later cutoff time. That meant I would have to work late to do the build. I had to decline unless somebody else would do the build.

You got to stand up for yourself these days. I now vow to fight tool and nail against anybody committing my after hours time to work. Fight the good fight. It is definitely worth it.