My biggest Nightmare: Complicated Legacy Code without Unit Tests

Tell us a little bit about yourself.

Hello, my name is Michał Kuliński.  I’m a husband, father, member of a Christian community, programmer, software craftsmanship enthusiast living and working in Łódź, Poland.

My daily work routine involves  handling all kinds of IT problems in an international company that has over 400k employees world-wide.

In my spare time I like to ride bicycle and play futsal.

How did you get started in programming?

It was the late eighties when I’ve seen Atari 800 XL computer in my uncle’s house. I’ve asked my parents to buy me a similar computer.

Atari, computer, coding, TDD
Atari 800 XL Photo Courtesy: Evan – Amos, Wiki Commons

Another uncle gave me a magazine educating its readers on “How to start with 8-bit computers”. When I was a young boy, it was amazing to program even simple loops.

What are some of the languages you use today and why?

Currently, I’m using C# language as part of my job assignment. Previously I’ve used Apex. Apex is the official language of the Salesforce platform. This language merges some of the good things from Java and C#.

What type of applications do you develop?

During my professional career, I was mainly developing business applications. Maybe it seems like a boring topic, but let me tell you here that it is full of challenges and can be fun!

What’s your biggest passion these days related to programming?

I’m crazy about software quality, good practices, Test Driven Development, static code analysis and similar topics. I read lot of topic related books and follow people involved: Robert C. “Uncle Bob” Martin, Kent Beck, Martin Fowler, Sandro Mancuso.

What still sucks and shouldn’t be in programming?

I think that human-computer interfaces are still in the simple form. You have to write text using a keyboard. More complex methods are still in progress like interacting with voice. I’m looking forward to be able to chat with my computer and share my thoughts ☺

What are some of the most important skills developers can have?

It is an ability to write software that you can easily change. First, you think that every functionality will remain always “as is”. But after every successful deployment, clients want something else. The only sure thing is that there will be always needed for change. It is very hard to write software that can be easily changed but it is very important.

How did you learn about Typemock and what was your first reaction?

I‘ve learned about Typemock after I’ve read a great interview with Uncle Bob on your blog. It is great to hear that you help programmers in their strive of creating better software using testing techniques.

Do you have tips for readers who are just starting out with Typemock?

I have had occasion to use it personally. I’ve used C# version. My first impression is that it is super easy to write, run and maintain unit tests with Typemock.

How do you convince your manager to write more unit tests or practice TDD?

It is always hard to convince inexperienced managers to use good practices. Those techniques cost you hard work, time and money at the beginning. But only experienced and wise managers know that those techniques bring even more money, client satisfaction and free weekends in the future.

Any tips on making managers understand the importance of using Typemock?

Every software that helps your programmers to be productive is worth your attention and place in your budget. Having good unit test code base there is always easier to change production code and respond quickly to client requirements.

Do you practice TDD and if so, what are some of your favorite code katas?

I practice TDD every single day when I write C# code on the backend and Javascript code on the frontend. My favorite code kata is, of course, Bowling Kata. I’ve tried also Word Wrap kata and I’ve realized the importance of Uncle Bobs’ Transformation Priority Premise. It showed me how to avoid TDD pitfalls.

What are some of your must-have tools or libraries that you use in your daily working life?

I use GIT on daily basis. This is absolutely fundamental. Then I use IDE that helps me with static code analysis, refactoring and easy unit test run. Currently, I’m using Visual Studio 2017. But I’m curious about Jetbrains Rider growth.

Who or what inspires you in the technical world?

Recently, I’ve followed John Somnez. His vlog, blog, and books are a great inspiration for programmers.

It is always good to watch some Pluralsight courses. Those courses have great quality, change my point of view and improve skills.

When you need a quick recess at work to regain focus, what do you do?

It is well known Pomodoro Technique. (Note from the Editor: The Pomodoro Technique is a time management method developed by Francesco Cirillo in the late 1980s. The technique uses a timer to break down work into intervals, traditionally 25 minutes in length, separated by short breaks.) It is great. I think the power of this technique is in frequent brakes. It is always good to walk from time to time, even outside the office to refresh your mental and vital energy.

What’s your horror/war story from the coding trenches?

My biggest nightmare is a situation when I have to change something quick in a very complicated legacy code base that does not have unit test coverage.

What’s the best advice you’ve ever received or what advice would you give your younger self?

The best advice I’ve ever received was:
“The only way to go fast is to go well.”
My message to my younger self is: “don’t hurry, trust the process even when deadlines are near. Follow the best techniques such as TDD, DRY, KISS, YAGNI and SOLID”.

What are some interesting links you can share about yourself? 

I write a blog where I translate Uncle Bob’s blog entries into Polish. The purpose of this endeavor is to share his great insights to the Polish audience.
I strongly encourage readers of this interview to write and translate all of the IT stars in your languages. I know that nowadays English is “lingua franca” of our industry. But there are a lot of novice programmers that do not master English and deserve to learn their craftsmanship from the best people.