Is refactoring a “needless rework”?

By Ganesh Samarthyam, Tushar Sharma, and Girish Suryanarayana  “Refactoring is a needless rework – I want my team to get design right the first time!” told a project manager when one of us were discussing software design with him. Is he right? Why should developers “waste” time improving the design of

Continue reading »

Architecture Refactoring: The Road Ahead

On September 3, 1967, Sweden made a switch from “left-hand traffic” system to “right-hand traffic” system. Sweden relied primarily on American made cars with left-side drive. Further, other Scandinavian countries (Norway and Finland) used right-side driving. These mismatches led to accidents. Hence Sweden decided to move to “right-hand side driving”.

Continue reading »

An Overview of Microservices

In the movie Despicable Me (amazing movie – if you haven’t watched it yet, watch it now!) the supervillain Gru employs hundreds of Minions to build a rocket to reach the moon. Minions are small cute yellow creatures and they don’t do much – but when they are organised to

Continue reading »

Software Architecture Refactoring: Case Studies

Written with Hari Kiran. What is software architecture? An interesting and useful definition of architecture is from Grady Booch: “Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change”. The process of creating architecture (and later evolving it) involves making a series

Continue reading »

When to Make Architecture Decisions?

The process of architecting a system (and later evolving it) involves making a series of principal design decisions or architectural decisions. In fact, architecture itself can be defined as a set of principal design decisions: “Architecture is a set of principal design decisions about a software system” – Richard N.

Continue reading »

Architecture Refactoring: A Whole New Ball Game

In my recent workshop on software architecture, I was discussing architecture refactoring. After the workshop, an architect made an important observation: “You have given many case studies and examples on architecture refactoring. But you clearly did not explain the difference between code refactoring and architecture refactoring. Developers are familiar with code refactoring,

Continue reading »

Unix Pipelines and Java 8 Streams!

I remember seeing an interesting movie named “Blue Crush” on surfing (the sea, not the internet!). I liked watching how waves roll and sometimes form a beautiful pipeline. In this movie, Anne Marie scores perfect 10 for surfing in a wave pipeline. Programming using Unix pipelines is as much fun and difficult

Continue reading »

War Story: Why Care About Technical Debt?

In our book “Refactoring for Software Design Smells”, we have included numerous anecdotes on technical debt. Here is a software war story that many readers liked because it related to their experience. [If you are new to technical debt, read this article before you continue.] — To understand the impact that technical debt

Continue reading »