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:

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