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