refactorIT logo


What is "refactoring"?

Who should read this page?

Refactoring, Design Patterns, Tests and Clean Code

So something is missing

What I offer

Why I think your company should hire me

What is "refactoring"?

We "refactor" when we change the source code of a program without changing its functionality. So the user doesn't see any changes.

Here's a metaphor to explain to a non-programmer what refactoring is:

Imagine you are organising a dinner-party. You have to complete a number of steps.

You could describe them like this: Or like this:
metaphor2 metaphor1

Both workflow diagrams contain exactly the same information. But I know which I would prefer to use.

It's an interesting phenomenon that a lot of source code develops to look like the diagram on the left. Various terms are used to describe this:

Refactoring helps you to restructure your code so that it looks more like the right-hand diagram. Thus allowing you to work with the code MUCH more effectively:

Who should read this page

This website is aimed at programmers of object-oriented languages such as Java, C# and C++ who are interested in improving their

Refactoring, Design Patterns, Tests and Clean Code

There are a small number of books about refactoring, most notably Martin Fowler's excellent work "Refactoring - Improving the Design of Existing Code".

My name is John Boyd-Rainey, and I would like to tell you about my experience running seminars on refactoring and Design Patterns.

Firstly, I'm always pleased when individual programmers, but more particularly when project groups or even whole companies want to learn about these topics. I see them as being essential to professional programming.

Unit Tests, Design Patterns, Refactoring

Over the last few years I have trained hundreds of programmers in Refactoring, Design Patterns and Testing. And I have found that these topics are fundamentally dependent upon each other.

So all three subjects go hand in hand. And to master one you have to master them all.

Unit Tests, Design Patterns, Refactoring, Design Principles

Design Principles are the basis for good object oriented design. I can often use these principles to create a better design long before I see which Pattern will emerge.

Some examples are:

  • program to an interface
  • separate variable parts of your code from the constant parts
  • prefer composition to inheritance
  • tell, don't ask.

Another closely related topic on the way to professional programming is Clean Code, as described by Robert C. Martin in his book of that name.

Unit Tests, Design Patterns, Refactoring, Clean Code

So something is missing

Our programming is 3-dimensional. First we learn all about control structures like if, loops, classes, comments etc.

Then we learn various add-on technologies for writing web applications, GUIs, database access and so forth.

But we also need to improve our skills in actually WRITING THE CODE that drives the web-app, GUI or whatever.

What is often missing

Most projects use class libraries, frameworks and other APIs. These in turn all use Design Patterns. It is a good idea to "go with the flow" when using such components. I.e. we should adopt the assumptions, structure and general design of those components. And that means we have to understand the Patterns they use.

And we get to such code by refactoring our existing code. Or by changing the way we code in the first place.

The more we practise refactoring code, the better we become at writing good code "the first time around"... because we learn to predict what problems certain designs will develop later on, so we learn to avoid mistakes.

What I offer

Why I think your company should hire me

Most programmers have never been told how to program well. Many went on courses lasting a few days and are expected to be consummate professionals.

We wouldn't expect an accountant to magically learn everything she needs to know in such a short time, and we shouldn't require that from our programmers.

I teach your coders how to work better, to produce programs which are better designed and which above all are more easily maintained, thereby facilitating bug-fixes, the addition of new functions and redesigns which invariably become necessary.

You have probably spent a lot of time and money learning new technologies such as Struts, Faces, Spring, XML, WPF, WCF etc., but your use of each of these technologies is only as good as the code which drives them. And that training is often sorely lacking.

That is what I deliver.

John Boyd-Rainey

Born in 1958 in northern England, I have lived in Germany since 1980 working in the computer industry mostly as a consultant and since 2003 as a trainer and coach.

I have programmed in various fields such as insurance, accounting and banking using Pascal, C, C++ and Java.

The subjects I regularly train include:

I work in English and German.

Contact me in Bonn, Germany on +49 228 963 99011 or under

info (at)

Prices on request.

Read more about my other professional activities and history on

I've posted a "map" of Martin Fowler's Refactorings on my i2Brain website.


Cookies: There are no cookies on this site.