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:

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