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:

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