Happy Are The Software Engineers.. (article)

My first ever published article is called "Happy Are The Software Engineers.." and it appeared in Better Software magazine in December 2006. The article describes briefly how complete concentration can create the feeling of happiness especially if the task at hand is meaningful. I wanted to highlight that working for software quality is meaningful and with Tick-the-Code you can achieve complete concentration.

Simply put, happiness is Tick-the-Code.

Tick-the-Code Inspection: Theory and Practice (paper)

My first ever scientific paper is called "Tick-the-Code Inspection: Theory and Practice" and it appeared in the peer-reviewed publication of ASQ (American Society for Quality) called Software Quality Professional.

As the name says, the paper reveals all details of Tick-the-Code up to the 24 coding rules. At the moment this paper is the most comprehensive written source for information about Tick-the-Code.

Tick-the-Code Inspection: Empirical Evidence (on Effectiveness) (paper)

My second paper is called Tick-the-Code Inspection: Empirical Evidence (on Effectiveness). It was prepared for, and first presented at, Pacific Northwest Software Quality Conference 2007. The paper presents measurements taken in Tick-the-Code training courses so far (about 50 sessions with over 300 software professionals). The results are revealing. The main point of the paper is that software engineers could keep their software much simpler and avoid making many of the errors software projects are so notorious for.

In the Appendix of the paper, you'll find all the active rules of Tick-the-Code at the time of writing (summer 2007).

Tick-the-Code - traditionally novel technique in the fight against bugs (article)

Pirkanmaan Tietojenkäsittely-yhdistys (Pitky ry) published my article in their member magazine Pitkyn Piiri 1/2008. It is called "Tick-the-Code - uusvanha tekniikka taistelussa bugeja vastaan" and it is only available in Finnish.

An Example Rule Introduced

There are 24 active rules in Tick-the-Code. Each one of them helps to locate either omissions, redundancies, ambiguities, inconsistencies or assumptions in the source code. Individual rule violations might seem minor, but when you let them accumulate long enough, you'll be in trouble.

Marked rule violations are called ticks. Try the following rule on your production-level code and see how many ticks you can find. Then analyze each tick and see if you can't improve the maintainability of your code.

The rule sample changes weekly, so in a mere 24 weeks of diligent visits, you can have yourself the complete set of Tick-the-Code rules. However, there is an easier way and you'll be rewarded with laminated rule cards to top it all up. Get trained! Contact Qualiteers if you want to know more.


"Do not hardcode values."

Hardcoded values are literal numbers, single characters, and plain character strings within code. For example, 100, 79, 0xFF, 'b', and "invalid value" are hardcoded. Hardcoded values make the maintenance of the code unnecessarily complicated. When hardcoded values are given good descriptive names, several benefits appear.

The code becomes easier to read and understand. It is also possible to show, which values are related to each other and which aren't. Maintainability grows.

Future Work

Tick-the-Code Inspection: The Book (book, working title)

Since 2006, there's a book on Tick-the-Code on the works. Currently the book project is on ice, as I study and gather more material and field experiences to include in the book. The book will be the most comprehensive written source on Tick-the-Code.

Excerpt from the book

The excerpt changes weekly. Each excerpt is still a draft version and might change before ending in the book.

Who is Responsible for Quality?

The concept of responsibility fits another root cause for quality problems, too. Responsibility works best when it is accepted or assumed even if it hasn't explicitly been given. In most troubled organizations nobody has assumed responsibility for quality. Sometimes a quality manager seems to be the only one struggling with quality issues, often reduced to the role of a quality accountant more than anything else. Keeping track of metrics without them having any influence on the busy schedule isn't doing much for the quality of the product. Quality isn't a one-man job. It isn't a management job, either. Software quality is the responsibility of the people who have a chance of influencing the development of software. Everybody able to change the software, should consider improving it his or her duty.

Idealistic thoughts aside, one root cause hampering quality is simply the lack of skill. If the developers don't know how to create simple and maintainable software, they aren't going to. Their code will be terribly complex, and it will contain errors. It will contain errors that are hard to detect in testing, it will contain errors that a blind chicken would notice, it will contain errors that are difficult or impossible to fix, and it will contain errors a blind chicken could fix, assuming you pointed the keyboard to it. The developers will try their best to reach good quality levels but won't succeed very well. Many beginners fit this description. They will be enthusiastic about the new functionality they get to implement, but have no idea about quality. And the results will be messy.

If the organization has no safeguards for dangerous beginners, the situation becomes even nastier. If the novice developer doesn't get too bad feedback on his code, he might assume it to have been quite good, at least of average quality. He might even be satisfied with himself. If the organization offers no training or requires no improvement from the developers, the developer might be stuck at his beginner level for good. He'd assume a careless attitude towards quality, which explains the multitude of quality problems with seemingly experienced developers. Such developers with many years of coding under their belts are actually just old beginners. Their level of coding is bad, unimaginative but good enough for the organization they are in. They don't care about quality, they have never had to and they aren't going to change their ways after all these years. As if they could learn.

The developers aren't really to blame. The organization has conditioned them to respond to functionality and deadlines, and to ignore quality. As always, the management is to blame. When quality is just a buzzword, unsupported by the software development processes, it is virtually impossible for the developers to do anything for quality. If the deadlines just get tighter with every project success, the projects soon learn not to succeed. If the developers do not have time for quality, they cannot produce quality. If they don't get the necessary training, they won't learn. If they only "get to taste their own medicine", i.e. always just see their own code, they won't be able to expand their imagination. If the developers aren't allowed or encouraged to read books or work on experimental projects, they won't evolve. If they cannot try out new languages and tools and methods, they are going to stay on their current level of development, which means getting left behind in the real world.

Systemic support of quality is important. After the developers have gained the necessary skills, they need to feel that they are allowed to use those skills for good. That feeling comes from the management's reactions to quality work. If the management only pays lip service to quality, the developers will notice it in a crisis. Suddenly there is no time for quality, suddenly it is all about adding more functionality and getting it done quickly.

If product quality isn't taken seriously by everyone, if it isn't an explicit goal, if the people involved don't have the necessary skills, knowledge and attitude, if the systems of the organization don't support quality work, if the necessary tools and methods aren't available and if the people involved aren't striving to improve, there will be quality problems. It won't be easy to pinpoint a specific root cause in each individual problem case, but there is always a reason. It is absolutely vital to understand the root causes, otherwise the decisions and improvement attempts will be chaotic and have chaotic outcomes. It is important to understand whether a tired developer makes an error, or the management moving the arbitrary deadline a few weeks earlier causes havoc, or the developer staff works as best it can still causing problems. In one case you need to cut the developers some slack, on another you need to work on commitment and motivation on all levels of the organization and in one case you'd better find a learning solution.

Quality is everybody's responsibility. The developers need to keep their skills and tools up to date, the managers need to support the necessary changes in their planning. The whole organization must be behind continuous improvement for quality.

Another well-pondered question in Chapter 3. "Root Causes".

Itchin' for a Drive?

Get your bearings:


Click for the sitemap.

Participants comment:

Actual training feedback

Click for training course details.