Blog posts
Natural Order of Refactoring Explored Part 2: Compose Method
Compose Method
Analyzing methods, such as the one presented in Part 1, often leads us to understand the main points of the algorithm contained in them. This insight paves the way for the next step: try to split a large method into smaller steps by extracting them into separate methods (refactoring using the Extract Method). Thus, the original method will consist of a sequence of calls to these new methods. With the right naming conventions, you can achieve code that reads like a book.
Read MoreThe Natural Order of Refactoring Under the Microscope Part 1
Refactoring is an age-old problem—perhaps not the best word given the relatively short existence of software engineering as a discipline. Everyone knows refactoring should be done, but nobody seems to have the time for it.
Read MoreClean Code
The Importance of Clean Code
There are ongoing philosophical discussions on whether clean code matters and if it is worth investing time to read it. I won’t engage directly in this debate. Instead, a small example should suffice:
Read MoreWhat Name for This Method?
What Name for This Method?
public class OptionsAwareObject {
private Options options;
public void updateOptions(String fontName, int fontSize) {
options.setFontName(fontName);
options.setFontSize(fontSize);
}
}
class Options {
private int foregroundColor;
private int backgroundColor;
private String fontName;
private int fontSize;
// ...
}
Is updateOptions
a good name for this method? Of course not! updateOptions
is a general name that suggests a comprehensive update of options. Meanwhile, we are only updating font-related information. The responsibility of the method is thus the change of font-related options. A better name would be:
A Manifesto Against Developers
A Manifesto Against Developers
I hate you because:
- You focus on the features of your IDE instead of the features your client/user needs.
- You consider typing at the keyboard as thinking.
- You waste countless hours manually testing your code.
- You spend more time struggling with frameworks than delivering value to end users.
- You code for hours without asking yourself, “What am I really doing?”
- You naively believe that technologies and tools will solve your problems.
- You naively believe that a good algorithm is more important than a good understanding of requirements.
- You naively believe that your intuition is enough for writing good code.
- You naively believe that you can manage the complexity of the system piece you’re working on.
- You agree to unrealistic deadlines.
- You write poor code and rationalize it with various excuses (because there is no time).
- In your head, you create code snippets without really knowing what needs to be done.
- You guess what needs to be done rather than clarifying.
- You mindlessly follow the technology you use.
- You don’t understand the tools and technologies you use.
- You isolate yourself in your piece of code, breaking contact with the world.
- You think it’s all the fault of managers or clients and believe you can’t do anything about it.
… even though I love you because I am a programmer myself.
Read MoreCall for Code Samples
Call for Code Samples
I would gladly present the idea of the natural order of refactoring using an example code. Unfortunately, for obvious reasons, I cannot use our clients’ production code, and I do not have the time to prepare an example for this purpose. However, perhaps someone would be willing to allocate their piece of code, a project that doesn’t have too many (or any) restrictions on public publication.
Read MoreThe Natural Order of Refactoring - A Conceptual Sketch
The Natural Order of Refactoring
In software development, refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior. This process, often visualized in a conceptual sketch, can help developers understand the natural flow and order in which refactoring should occur.
Read MoreYoung Manager/Team Leader! Get a Grip!
History tends to repeat itself, and this is a common tale among young managers and team leaders. A recurring, tragic mistake is the commitment to unrealistic deadlines.
Read MoreA Few New Concepts - Architectonic Mantra, Design Retrospective, Shared Context, Natural Order of Refactoring
Recently, several named concepts have evolved in my mind, or maybe I just understood them well. Here are a few notes that I consider an alpha draft ;-)
Read MoreCategories
- Agile ( 1 )
- Agile Conferences ( 1 )
- Agile Development ( 1 )
- Agile Philosophy ( 1 )
- Agile Practices ( 16 )
- Architecture ( 1 )
- Artificial Intelligence ( 2 )
- BDD ( 3 )
- Behavioral Patterns ( 1 )
- Best Practices ( 4 )
- Books ( 1 )
- Business Strategy ( 2 )
- Career Advice ( 1 )
- Career Development ( 1 )
- Career Opportunities ( 1 )
- Client Collaboration ( 1 )
- Client Relations ( 1 )
- Code Quality ( 3 )
- Code Refactoring ( 1 )
- Communication ( 2 )
- Community Development ( 1 )
- Complexity Theory ( 2 )
- Conferences ( 3 )
- Conflict Management ( 1 )
- Cultural Perspectives ( 1 )
- Design Patterns ( 1 )
- Employment ( 1 )
- Healthcare Experiences ( 1 )
- Java User Group ( 1 )
- Java User Groups ( 1 )
- Knowledge Development ( 1 )
- Leadership ( 17 )
- Leadership Skills ( 1 )
- Management ( 1 )
- Management Practices ( 1 )
- Meeting Facilitation ( 2 )
- Online Tools ( 1 )
- Organizational Culture ( 1 )
- Personal Development ( 5 )
- Personal Growth ( 2 )
- Personal Insights ( 1 )
- Personal Productivity ( 1 )
- Philosophy ( 1 )
- Poetry ( 1 )
- Problem Solving ( 1 )
- Productivity ( 7 )
- Productivity Tips ( 2 )
- Professional Development ( 1 )
- Programming ( 2 )
- Programming Patterns ( 1 )
- Programming Practices ( 2 )
- Programming Techniques ( 1 )
- Project Management ( 16 )
- Refactoring ( 7 )
- Research Techniques ( 1 )
- Scientific Methodology ( 1 )
- Scrum ( 1 )
- Scrum Practices ( 2 )
- Software Architecture ( 2 )
- Software Design ( 1 )
- Software Development ( 35 )
- Software Engineering ( 1 )
- Team Building ( 1 )
- Team Development ( 1 )
- Team Dynamics ( 3 )
- Team Management ( 4 )
- Team Meetings ( 1 )
- Technical Management ( 1 )
- Technology and Culture ( 1 )
- Testing ( 2 )
- Time Management ( 1 )
- Work Strategies ( 1 )
- Workplace Dynamics ( 1 )
- Workshops ( 2 )
Tags
- 20/80 Rule
- 33rd Degree 4charity
- Acceptance Testing
- Agent Frameworks
- Agent Patterns
- Agile
- Agile Development
- Agile Mindset
- Agile Practices
- Agile Prague
- Agile Tour Vilnius
- Agility
- AI Agents
- AI Workflows
- Architectonic Mantra
- Architecture
- Architecture Documentation
- Architecture Evolution
- Archive
- Assertiveness
- Automated Testing
- Awareness
- BDD
- Behavior-Driven Development
- Behaviour-Driven Development
- Best Practices
- Book Release
- Business
- Business Priorities
- Business Relations
- Business Strategy
- C#
- Cambridge
- Career Development
- Career Transition
- Change
- Change Management
- Charisma
- Clean Code
- Client Communication
- Client Relations
- Code Cleanup
- Code Improvement
- Code Practices
- Code Quality
- Code Readability
- Code Samples
- Code Smells
- Code Standards
- Coding Practices
- Coding Standards
- Coding Style
- Collaboration
- Commitment
- Communication
- Complex Systems
- Compose Method
- Conferences
- Conflict Resolution
- Constraints
- Consulting
- Context
- Continuous Integration
- Continuous Refactoring
- Core Domain
- Corporate Culture
- Cracow
- Culture
- Cynefin
- Cynefin Framework
- Data Organization
- DDD
- Deadline
- Deadlines
- Decision Making
- Design Patterns
- Design Retrospective
- Developers
- Development Challenges
- Distraction
- Distributed Teams
- Documentation
- Domain Expert
- E2E Testing
- Effective Meetings
- Employee Engagement
- Employment
- Encapsulation
- Environment Simplification
- Essentialism
- Estimation
- Evidence
- Evolutionary Architecture
- Evolutionary Paths
- Expert Skills
- Extract Method
- Facilitation
- Focus
- Google Notebook
- GTD
- Habits
- Hacker Culture
- Healthcare
- Heuristics
- Historical Influence
- Human-Side
- Humanity in Business
- Implementation
- Implementation Patterns
- Implementational Patterns
- Incremental Work
- Information Management
- Information Sources
- Innovation
- Integration Testing
- Intention vs Content
- Interdisciplinary Teams
- Introduction
- IT Leadership
- IT Management
- IT Projects
- Java
- Java Community
- Java Programming
- Javarsovia
- JBehave
- JDD 2015
- Job Market
- Job Satisfaction
- JUG
- Kanban
- Knowledge Management
- Large Language Models
- Leader
- Leader Role
- Leadership
- Leadership Challenges
- Leadership Development
- Leadership Skills
- Leadership Strategies
- Lean
- Learning Strategies
- Legacy Code
- LLM
- LLM Agents
- Maintainability
- Management
- Master-Slave Mentality
- Mediation
- Meeting Facilitation
- Meetings
- Mentoring
- Method Naming
- Methods
- Mindfulness
- Models
- Motivation
- Multitasking
- MVC
- Naming
- Natural Order of Refactoring
- Negotiation
- NFZ
- NoEstimates
- Non-Violent Communication
- Nonviolent Communication
- Note-Taking
- Object-Oriented Design
- Object-Oriented Programming
- Onboarding
- Online Tools
- Organization
- Organizational Issues
- Pareto Principle
- Parkinson's Law
- Participatory Management
- Performance Appraisals
- Personal Development
- Philosophy
- Planning
- Planning Meetings
- Poetry
- Poland
- Prague
- Pressure
- Preventive Care
- Prioritization
- Proactive Thinking
- Problem-Solving
- Product Owner
- Productivity
- Professional Development
- Professionalism
- Profit Maximization
- Programming
- Programming Practices
- Project Management
- Project Planning
- Prompt Engineering
- Realistic Deadlines
- Refactoring
- Remote Access
- Requirements
- Requirements Gathering
- Research
- Responsibility
- Retrospectives
- Science
- Scope Creep
- Scrum
- Scrum Guide
- Scrum Implementation
- Scrum Master
- Self-Documenting Code
- Self-Improvement
- Self-Organization
- Servant Leadership
- Shared Context
- Soft Skills
- Software Architecture
- Software Development
- Software Engineering
- Software Testing
- SOLID Principles
- Source Code
- Source Code Management
- Standups
- Strategy
- Structuring Meetings
- System Design
- System Efficiency
- Task Management
- Task Prioritization
- TDD
- Team
- Team Collaboration
- Team Communication
- Team Development
- Team Dynamics
- Team Efficiency
- Team Leadership
- Team Learning
- Team Management
- Team Meetings
- Teamwork
- Technical Debt
- Technical Leader
- Technical Leadership
- Technology
- Test-Driven Development
- Testing Strategies
- Time Management
- Timeboxing
- Training
- Transformational Leadership
- Trust
- Truth
- Unit Testing
- Up-Front Design
- User Group
- User Interface
- User Stories
- Vertex Testing
- Vision
- Warsjawa
- Web 2.0
- Work Efficiency
- Workflow
- Workplace Culture
- Workshops
- Łódź
- Łódź JUG