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:

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