Pragmatism for decision-making in Software Development
Overview
This post discusses pragmatism as a tool in Software Development. I consider myself to be pragmatic in my approach to software engineering, and wanted to explore the concept a little more.
What is pragmatism?
Pragmatism1 is a philosophical tradition that began in the United States around 1870. It is a way of thinking that focuses on the practical consequences of actions rather than on abstract principles. Pragmatists believe that the truth of an idea is determined by its usefulness in solving real-world problems. They are concerned with what works, rather than with what is theoretically correct.
Pragmatism in software development
Pragmatism can be a powerful tool in software development. Software projects can be complex, with lots of moving parts, and there’s lots of opportunity for things to go wrong, extending timelines and risking value delivery. Pragmatism can help you make decisions that are practical and effective, rather than getting bogged down in theoretical debates.
Some goals for pragmatism in software development can be distilled into the following:
- deliver value to the customer (users and/or organization)
- maximize stakeholder satisfaction
- minimize stakeholder dissatisfaction
Looking around for inspiration
I looked around to see if there’s any existing work on pragmatism in software development. I found a few interesting papers, articles, and books that I wanted to share.
Optimization in Software Engineering - A Pragmatic Approach
Guenther Ruhe2 published a paper on Optimization in Software Engineering - A Pragmatic Approach
3. The paper
takes a process-based approach and includes a checklist for performing the optimization process. This process includes:
- Scoping and Problem analysis
- Modeling and Problem formulation
- Solution Design
- Data collection
- Optimization
- Validation
- Implementation
- Evaluation
The following describes each step in the process:
Scoping and Problem analysis
The first and most obvious step in the process is to ask if the problem can be solved easily. Easily solved problems help sidestep the need for additional time investment. When looking for an easy solution, consider alternatives as well.
Understand the stakeholders and decision makers around the problem. How important is this to them? How much time and effort can be invested in solving the problem? What’s the budget associated to solving the problem, considering both time and money?
Which approach best aligns with the business objectives and how would optimization benefit the problem context?
Modeling and Problem formulation
Depending on the complexity of the problem, work to break it down into smaller, more manageable parts. Identify key variables, constraints, and any dependencies.
Model project resourcing, budget and time for each phase of the project.
Identify technological constraints and dependencies.
Solution Design
Is there a solution already available that can be used as a baseline? If so, how does the proposed solution compare to the baseline?
What are the perceived expectations for the optimized approach?
Data collection
What data is available and what data is needed to solve the problem?
How reliable is the data? Is there a need for data cleaning?
Optimization
What settings are made and why? How do they vary?
Validation
What are the criteria for validation? How are they measured?
Do the stakeholders agree with the proposed solution?
Implementation
Is there anything that needs to be adjusted?
Evaluation
How much does the implemented solution solve the original problem and is acceptable by the stakeholders?
How much above the baseline does the implementation improve?
The Pragmatic Programmer
The Pragmatic Programmer is a book by Andrew Hunt and David Thomas. The book is a guide to software development that focuses on practical advice and best practices. The authors emphasize the importance of writing clean, maintainable code, and of being pragmatic in your approach to software development.
There are so many good nuggets in this book. If this isn’t already on your bookshelf, I highly recommend it.
Some of my favorites nuggets include:
- Don’t live with broken windows
- Good-Enough Software
- Remember the bigger picture
- Prototype to learn
Further reading on Pragmatism
- https://blog.liblab.com/pragmatic-engineers-philosophy-first-part/
- https://arxiv.org/pdf/1912.02071
- https://pkritiotis.io/technical-decision-making-fast-paced-environments/
Wrapping it up
I’m still exploring the concept of pragmatism in software development. Going beyond just pragmatism, I’m also interested in how to be a better product engineer4 while practicing pragmatism. I’m looking forward to sharing more on this topic in the future.