Introduction
I've been involved in more than a dozen projects, all of them with a variety of success; one thing I can assure you is that the best projects (or the ones that are more likely to succeed) are those where the whole team, including developers, marketers and sales force, have a deep understanding about the product and the problem that is being solved.
That is just stating the obvious: the more context about the salesforce's features and benefits, the better they can do their job.
But the importance of explaining the whole problem at stake to developers is often overlooked, not just the planned "solutions" to build.
Let me clarify with an example: my company, Software on the Road, works with lots of startups, usually building a prototype or MVP for them to test the market, but startup founders in their lack of experience, more often than not, try to aim to pretty useless features that don't add value to the customer.
That's why I always try to get a deep understanding of the problem to be solved and the customer pains, and so plan for the project's future.
And sometimes they don't want to hear my opinion; after all, I'm not a startup founder, I'm just a software engineer...
Peters Naur's work - Theory Building
I've come across this paper from Peters Naur, that states that accepting that programs will not only have to be designed and produced, but also modified so as to cater for changing demands, it is concluded that the proper, primary aim of programming is, not to produce programs, but to have the programmers build theories of the manner in which the problems at hand are solved by program execution
What is theory building?
Theory building is the process by which programmers develop a deep understanding and insight into the problem they are trying to solve with their program.
This involves not just writing code, but also creating a theory or framework for how the program will interact with and solve real-world problems.
The theory built by the programmers guides their design decisions, helps them explain and justify their choices, and enables them to effectively modify the program as needed to adapt to changing circumstances.
It suggests that programming is more than just writing code—it is about developing a deep understanding of the problem domain and creating a solution that aligns with that understanding.
Why is it important?
Because it allows programmers to develop a deep understanding of the program they are working on.
By building a theory, programmers can explain how the program relates to real-world activities, justify design decisions, and effectively make modifications to the program.
Theory building also helps programmers create a coherent and effective program structure, leading to better quality and maintainability of the program over time.
Alright, but why should I care about it?
As a fellow software developer, how often have you created features that weren't important or added any value to the product?
At the end of the day, we are responsible for creating the product our Employer (or client, in my case) sells. Harmful products don't sell.
Also, imagine scaling a team from 3 devs to 100, you really need to put down a plan, have documentation, build a theory, about the problem that the software is solving.
The golden rules
-
Programming should be viewed as an activity where programmers form a theory of the matters at hand, rather than just producing a program.
-
The theory built by programmers is essential for understanding and modifying programs.
-
The quality of a programmer’s work is related to the match between their theory of the problem and their theory of the solution.
-
The theory held by programmers transcends what is recorded in documentation.
-
Program modifications require a determination of similarity between the existing solution and the new demands.
-
The Theory Building View emphasizes the importance of programmers possessing the appropriate insight.
-
Intellectual activity in programming involves building and having a theory, not just following rules.
-
Problems in program modification arise from viewing programming as text production rather than theory building.
-
The decay of a program text can occur when modifications are made without a proper grasp of the underlying theory.
-
Understanding programming as theory building can help overcome conflicts and frustrations in the programming activity.
How to implement Theory Building in your project or organization
To implement theory building into your project, you may need to focus on developing a strong theoretical foundation for your programming work.
Emphasizing the importance of understanding the problem domain and how your program interacts with it.
This may require close collaboration among your team members to ensure that everyone shares a common understanding of the theory behind the program.
Additionally, documenting your design decisions and the rationale behind them can help pass along the theory of your program to future developers, ensuring that they can build an accurate theory of the system.
Using metaphors and clear explanations can also aid in conveying the underlying theory of your program to others.
Overall, it involves fostering a culture of understanding and theory development among your team members, ensuring that everyone has a deep insight into the program and its relationship to the real world.