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:

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