I have been working for a big company (8000+ employees) for almost 2 years now, and was hired just after I finished my study course.

Everyone here has to deal daily with legacy code which is often very badly designed and full of hacks. At first, I kept a low profile, trying not to criticize things too much. But the situation, as it stands, has become very difficult to live with and it seems no one is willing to improve/replace the tools we use.

To be more explicit we have:


An obsolete source control tool (Visual SourceSafe)
Plain old makefiles which only support full rebuild
.def files which must be maintained manually and separately for all existing architectures
monolithic headers files and projects with very few different files (but each has around 3000 lines of code, which sometimes takes care of very different tasks)
no use of the "new" languages facilities (well std::string is not that new but nobody except me uses it)


I decided, a few months ago to do something about it, by designing a new compilation environment. I could get incremental builds to work reliably, faster compilation times, better structured projects, automatic .def files generation. I even created a bridge from/to Git to/from Visual SourceSafe.

I showed my achievements to several collegues and our boss but it was like nobody cared. They were all like "Well... people are used to do it that way now. Why would we change things ?"

The changes I suggested were designed so that we could have a soft transition from the old system to the new one. Each improvement could be applied separately and safely.

I even tried to get some of my coworkers involved in the changes. But so far, no success.

Have you already faced a similar situation ? What can one do when "lead by example" doesn't work ?

Aim for the head: "Lead by example" should have improvement in mind, but it should be targeted on people not on technology. Maybe you have invested too much time in improving technology, but not enough time in what is going on in their heads. Think about the driving factors why there is an opposition for new things. In many cases they just fear some risk. Identify those risks and find counterarguments for them.

Grab the fresh meat: It is easier to win over employees who want to change things. You notice them immediately when you see them. 

Avoid the rotten meat: Some will never sympathize with your ideas. Leave them aside.

Grow to a critical mass: Find people who sympathize with your ideas. Win the over one by one. At some point if a critical mass is reached, more and more people will follow your example voluntarily.

Management vocabulary: Managers are not interested in better designs. Their language is money and time. Make clear how much man hours are wasted for bugs. Make clear that unsatisfied customers who encounter bugs are not profitable. Demonstrate how much faster you can implement a new feature. You need to choose another vocabulary for managers.

It is all about processes: Better technologies do not make better programmers and programs. If you have good running processes, even outdated technologies lead to good results. Think about were effort and time is wasted. Maybe it is not the technology, but something in the processes is going awfully wrong. In most cases it is a lack of communication.

Find a new company: You already have done a lot. You can still try to improve things, but it is also up to you to decide how long you want to try it and how much energy you want to invest. Keep in mind: Even if you cannot achieve a lot of improvement, you will learn a lot out of your efforts. At some point you need to move on.
