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:

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