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:

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