Search
Close this search box.
Search
Close this search box.
Search
Close this search box.

Time To Reorg – An Intro to Refactoring

Facebook
Twitter
LinkedIn
Pinterest
WhatsApp

Organizations reorg all the time. And again. Why do they do that? Setting cynicism aside, organizations reorg to adapt to new realities, to new demands. A team of 5 people that grew to 20 people needs to split to smaller teams. A business group dealing with a fast-growing market needs to come up with a new strategy to cope with the demand. A startup of 20 people will need a different structure than that of a company of 100 people. As business demands change there is a need to adapt the organization’s structure.

Reorg is an expensive venture, yet organizations do it again and again. Because they have to do it – they have no choice.

In a similar manner, the codebase of a product needs to be reorganized again and again to adapt to changing circumstances. A class that has more and more methods needs to split into smaller classes, otherwise, it will be very difficult to maintain it. A conditional (If-Else statement) that grew up to a monster needs to be shrunk again, otherwise, it will be prone to defects. A once simple interface that grew and expanded needs to have some wrapper to make clients’ work bearable.

In fact, taking a hike on Conway’s Law it makes sense that refactoring will somehow be related to reorg, at least in the sense that a change in the organization structure is related to adaptations in the codebase.

We call the process of adapting the codebase “refactoring” – changing the structure of the code not to get new functionality but to make the code better adapted to our new demands, business and technical alike.

Unlike reorgs, refactoring is part of the ongoing work of every developer. Every time a developer is handling code she needs to think about whether she should change the structure of this code. Should the method be renamed? Should a new interface be extracted? Should she replace the conditional with subclasses?

Just like dev doesn’t work without test, dev and test don’t work without refactoring. There are many cases where refactoring is a key player in making the code testable (but I’ll write about it some other time).

I’ve never been in a scouts’ camp but I hear they’re supposed to leave it in better shape than they found it. In the same spirit, a developer should leave the code in a cleaner state than she found it.

Two issues immediately arise, though: First, refactoring takes time. Correct. Reorgs also take time, yet we do them. Refactoring takes less time and provides faster results.

The second issue is that constant refactoring will make the system change all the time. Changing names, changing structure. Won’t that be counterproductive? Won’t that inhibit maintenance? “I’m used to looking for method err4get and now someone renamed it”. The idea is that refactoring should make the system more maintainable. If it makes it less maintainable – don’t do it. Names should be clearer, the structure should be easier to understand, and easier to test and change. Getting into a state of mind that we’re not afraid to make changes in our code is a healthy thing.

Every time your organization goes through another reorg you should ask yourself when did you invest such efforts in your codebase. Codebase reorg should happen all the time, on small scale, getting the code ready for the coming business challenges.

Subscribe for Email Updates:

Categories:

Tags:

Introduction to ATDD
Implementation of Lean and Agile
Code
Kaizen
Scrum
lean agile change management
Nexus vs SAFe
ATDD
Professional Scrum with Kanban
LeSS
Agile
Agile Testing Practices
The Agile Coach
Sprint Planning
Scaled Agile Framework
Agile in the Enterprise
Scrum Guide
Acceptance Test-Driven Development
GanttBan
Scrum With Kanban
Continuous Planning
Quality Assurance
Scrum Primer
Lean Agile Basics
Agile Assembly Architecture
Systems Thinking
Kanban 101
POPM
Presentation
Lean Agile Management
Professional Scrum Product Owner
System Archetypes
Atlaassian
Spotify
Risk Management on Agile Projects
Perfection Game
Continuous Deployment
Nexus
Hybrid Work
Managing Projects
Agile Contracts Best Practices
Certified SAFe
Frameworks
SAFe DevOps
Test Driven Development
ScrumMaster Tales
Agile Exercises
Value Streams
Lean and Agile Techniques
Agile Product Ownership
Video
Professional Scrum Master
Keith Sawyer
Agile Mindset
Applying Agile Methodology
Continuous Integration
Planning
Kanban Kickstart Example
Accelerate Value Delivery At Scale
System Integration Environments
Kanban Game
Agile Marketing
Scrum and XP
Agile Games and Exercises
Lean and Agile Principles and Practices
Program Increment
Sprint Retrospectives
Continuous Improvement
Agile Techniques
Nexus and SAFe
speed at scale
Product Ownership
Agile Israel Events
Agile Outsourcing
Agile Project
SAFe
Tips
BDD
SAFe Release Planning
Scrum Values
RSA
Entrepreneurial Operating System®
Agile Release Management
Slides
Legacy Enterprise
RTE
Scrum Master
Agile Project Management
chatgpt
Large Scale Scrum
RTE Role
QA
Releases Using Lean
Engineering Practices
Business Agility
Built-In Quality
Software Development Estimation
Lean Agile Leadership
Lean Agile Organization
ART Success
Jira admin
Agile Release Planning
ALM Tools
Process Improvement
Implementing SAFe
DevOps
Product Management
System Team
Covid19
agileisrael
Managing Risk on Agile Projects
Agile Basics
Tools
Introduction to Test Driven Development
PI Objectives
Atlassian
What Is Kanban
Nexus and Kanban
Lean-Agile Budgeting
Agile Games
Daily Scrum
Agile for Embedded Systems
Kaizen Workshop
Agile Development
ATDD vs. BDD
WIP
Effective Agile Retrospectives
Operational Value Stream
Pomodoro Technique
Agile India
Software Development
Scrum Master Role
Lean Budgeting
LAB
ROI
Reading List
Agile Israel
transformation
User stories
Risk-aware Product Development
Continuous Delivery
PI Planning
A Kanban System for Software Engineering
The Kanban Method
Lean Software Development
Rovo
AI
AgileSparks
Games and Exercises
Webinar
Kanban
IT Operations
Agile and DevOps Journey
Change Management
Agile Community
SPC
TDD
Agility
ARTs
An Appreciative Retrospective
Agile Program
Sprint Iteration
Portfolio for Jira
Self-organization
SA
Limiting Work in Progress
Artificial Intelligence
LPM
Risk Management in Kanban
Achieve Business Agility
Agile Risk Management
Lean Risk Management
Confluence
Advanced Roadmaps
Release Train Engineer
Coaching Agile Teams
Manage Budget Creation
EOS®
Jira Cloud
Kanban Basics
Principles of Lean-Agile Leadership
Lean-Agile Software Development
Lean Agile
Story Slicing
Scrum.org
Elastic Leadership
AI Artificial Intelligence
Iterative Incremental Development
Agile Product Development
Amdocs
Retrospectives
NIT
Team Flow
Legacy Code
Certification
Agile Delivery
Jira Plans
Rapid RTC
Enterprise DevOps
speed @ scale
Jira
Nexus Integration Team
predictability
Lean Startup
AgileSparks
Logo
Enable registration in settings - general

Contact Us

Request for additional information and prices

AgileSparks Newsletter

Subscribe to our newsletter, and stay updated on the latest Agile news and events

This website uses Cookies to provide a better experience
Shopping cart