Linda Bonanno's Weblog

Entries from November 2009

What Can Development Do To Improve Software Quality?

November 24, 2009 · 1 Comment

Well, this topic is a little bit more technical than my usual postings. I recently had an e-mail exchange with someone on this topic and decided that it could make a pretty good post as well. Senior management can drive significant improvements in software quality by encouraging certain practices and behaviors in a development organization. Sometimes this means changing the culture of the organization to see problems as an opportunity to improve rather than an opportunity to initiate a witch hunt.

In a dysfunctional development culture software bugs are seen as failures that should not occur and should be hidden at all costs. Development teams and test teams are adversaries – fighting over the differences between designating a problem as just a “user error” vs an actual problem in the code. The worst instance of this that I have ever seen is a developer arguing that there wasn’t a problem – the code was working as designed. Nevermind that the design as it currently stood was something that would cause the customer untold amount of pain in order to work around. You’re supposed to test to the design right? No – actually you’re supposed to test based on the requirements.

First off, the team has to determine the best ways to find problems as early as possible in the development process – and with the least amount of manual effort. The concept of continuous integration is key here. Every time a programmer checks in a software change it should initiate an incremental product build automatically. This incremental build then should also kick off a base set of regression test cases to test the software functionality. BAM! The problem will be identified before a full build gets done at night *AND* you know exactly which check in to the source code repository caused it. This is awesome. It is easy to fix a problem if you know exactly where to look. If you wait a week or two to do a build you are looking through possibly hundreds of checkins to identify possible candidates that could have caused the failure. Now, granted sometimes this means that the change has to be backed out in order to do some serious refactoring. However, better to do this now rather than during system test. Full nightly builds are also crucial. Sometimes two independent changes can each work, but when you put them together all hell breaks lose. The full build should start from scratch – no reuse of any object files or libraries (unless they are third party code that hasn’t changed). It also should have a full set of “smoke” or regression tests associated with it that test more than just the basic functionality of the code. Another key point that a lot of people miss is that if software is checked in right before the nightly build starts it should NOT be included in the build if the incremental build testing it has not been yet run. It should be included the next day.

I think that a lot of good quality improvements also can be driven through metrics – you just have to pick the right ones. For example, I’ve never seen a lot of success with Lines of Code written. Some software is inherently much more complex. Frequently the engineers writing the least number of lines of code are doing the hardest work – and the most sensitive from a reliability / failure perspective. They also can generate the most number of bugs per lines of code because of this sensitivity.

Overall bug trends as different levels of smoke, unit, and system test are run have been very helpful however. The number of bugs should ramp up steeply when heavy development and testing commences. Over time the number of new bugs (and total open) will level off, and then should drop just as steeply when the product is ready to ship. Using that data to determine the overall health of the product is key. However, once management starts to use that data to find the organization or individual who is to “blame” for the code instability strange things happen. The culture needs to be setup in a way to encourage people to track all bugs. If individuals worry about being blamed they will stop formally tracking their bugs and will even try to negotiate with test groups to make bugs disappear. It is an odd phenomenon, but it can be easily mitigated by how the organization reacts to finding bugs. Finding bugs is a *good* thing. The earlier you find them, and the fact that the customer didn’t is most important!

This clearly leads into test driven design methods. Whenever you plan to add new functionality, you add the automated tests first to go along with it. When the code is done, the tests better pass. Whenever a new bug is discovered you add a new test that clearly shows the problem and can later prove the fix for that bug actually worked. By doing this a product develops a full set of test cases as it grows. There is no need for a big test case development push at the end. Quality is tested in from the start.

Categories: Technology
Tagged: , , ,

Focus focus focus

November 19, 2009 · 3 Comments

I recently read a blog post written by a friend and former colleague of mine that made me think about how important focus is. For background – see Don’t Die in the Wrong Lake by themadepeacock. He describes a scenario where his former employer was so focused on one particular industry that she killed the company by ignoring all of the other possibilities. This is when too much focus – or even more specifically the wrong focus is very bad.

To play the devil’s advocate, I have to say that normally, strong focus is very good. There is nothing worse than working for a company with very limited resources (time, money and people) that is trying to be everything to everybody. Diversity in focus is great for profitable companies and especially profitable companies that want to grow into other industries and have the means to do so. Too much diversity can kill a small company just as quickly as the wrong focus can.

First of all, small companies are highly dependent upon each one of their customers. This is because typically small companies only have a few of them. If you only have 10 customers it is really painful to lose 1 of them. For a bigger company losing one customer is only bad if it is a really high profile large customer.

If you are a customer of a small company, you know that you are taking a risk in buying from them. If you are working with Joe’s Software Emporium you don’t know if the company will be around for the long haul or not. Joe is clearly not IBM. The reason you *are* working with Joe is because he can provide you with something very specific that no one else can provide. This may mean a particular piece of functionality, a particular customer service capability, or even just the fact that you can get something small and simple at a price point that larger companies may not be interested in selling as an independent product (it’s not worth their effort). Joe’s customers are dependent on his focus. They care about what he is providing to them now, and how it will meet their needs in the future. What if Joe decided to put most of his resources on another product that his customer’s aren’t interested in – splitting his focus? He might lose his current customers trying to get different ones.

I’ve worked for a number of companies that decided not to focus on the product that they were successfully selling in the market place even though it could be improved and its revenue could be grown significantly. Instead, these companies started multiple new efforts, sometimes it almost felt like the flavor of the week. What this caused was significant alienation of their existing customer base as well as frustration at the employee level. Some employees could clearly see the customer problems and were powerless to stop them due to a lack of resources. Other employees were getting whip-sawed among multiple top priorities and were never able to focus (there’s that word again) successfully on getting anything done.

Remember – focus is good. It’s only the wrong focus that is bad.

Categories: Corporate Strategy
Tagged: , , ,

How to Prepare for an Interview

November 15, 2009 · 3 Comments

Have you ever wondered exactly what you are getting into when you go on an interview? I have. I remember what interviewing was like before web pages, social networks, and Google searches. It was really hard to get any information about a company without knowing someone who worked there. If the company was public you could go to the library and look at microfiche (dating myself!) newspaper articles and business results. That was the extent of it. Unless you were interviewing with someone famous, it was next to impossible to learn anything about the people you would be talking to. These days it is so much easier to be prepared.

I have a few things that I like to do before I interview with a company. Depending on the company and the information that is out there, this can be quite a bit of work – and a lot of times I can’t quite get to it all. Most of this is common sense I hope, but I thought I would write it down for others to think about.

I’ll start at the point where you’ve done enough looking into a company and a position to know that you want to send your resume in for consideration. At this point you should know a bit about the industry, the company and its publicly available financial information. You’ve made it through the resume screening process – and you’ve been contacted for an interview.

First off – ask a lot of questions when the recruiter or HR representative calls you. Find out exactly which group you are interviewing with. This will help you determine what product(s) they are responsible for. Many times the job description will not clearly state this. Don’t forget to ask for the interview schedule and names of the people you will be speaking with during your interview and what their roles are. Knowing if someone will be a peer, a superior or a subordinate and knowing if their role is technical or administrative can help you figure out what to expect when you talk to them.

Next go to the website. Many companies have an entire section devoted to “working at the company”. READ IT! if you haven’t already. You’ll want to concentrate on anything related to corporate culture to understand how you could fit in. Company blogs are great for this. Some sites even have hints about what your interview will be like. You’d be foolish not to pay attention to this information. One company that I talked to required a technical presentation to executives and senior management as part of their process. I knew about this far in advance of my interview day so I could plan for it carefully beforehand.

While you are on the website read as much as you can. If it is a large company with a huge amount of information on the web, concentrate on the appropriate line of business. What I mean by this is to read about the products that the group you are interviewing with is working on. Read the last 6 months worth of press releases from the company to learn about any interesting acquisitions, product releases or corporate sponsorships. Read the company’s most recent report to shareholders. If the company is not publicly traded, do some research on any investors that they mention. Expand your search from there if you have the time.

Once you feel like you’ve hit the important areas on the corporate website, start to branch out. Take the company name and search for the competition. Go to wikipedia and look up the company and its history. Go to yahoo finance or another finance site that you have access to and learn about the company’s recent performance if they are publicly traded.

Take those product names and search for the competition online. Search for product reviews online. Read them.

Ok – that’s a good start regarding the company. Now, the people. :-) This is the fun part. Don’t think of this as stalking – think of this as market research. Keep in mind that the company probably has already done these types of searches before talking to you. This will help level the playing field. Google everyone on your interview list. See what you can learn about their industry involvement, where they’ve been quoted in the press, and maybe even what their personal hobbies are. Read their blogs if you can find them. Look them up on Facebook. A lot of people have public profiles.

My favorite is to look them up on LinkedIn. You’ll find out where they’ve worked and where they went to school. Sometimes you’ll find that they have worked the same place you have, or they have worked with a friend or old coworker. Once you have that kind of information you can learn more about their personality by talking to your contacts. You can also use this to form a bridge – knowing the same people – provided they are people that you both like and respect can help you develop a relationship with your interviewer.

Obviously all of this research won’t help you if you’re not qualified to do the job you are interviewing for. What it will do is make you more comfortable with the company and the people you will be talking to. This will help you come across as more confident and knowledgeable.

Oh – and don’t forget to make sure that you are prepared for skills and knowledge based questioning. Know your resume inside and out!

Categories: How Tos
Tagged: , , , ,