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:

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