Structure and Content of Software Development
Did you know that there is a very interesting structural connection between software development and your personal growth, health, and well-being? If you are a developer, you probably haven’t looked at your craft from that perspective.
In this article, I’ll help you do that.
But first, we need to make some distinctions.
When you start your development career, you have no clue about how software is built. You don’t have a big-picture understanding of the process you are involved with. You just expect some tasks to be assigned to you, maybe some small bugs that you fix and that’s it. There is something about your project that you aren’t aware of. There exists a structure in your application that you don’t see at first when you start working on it. That is the underlying backbone for the application that makes all the parts work together harmoniously. It might be a nested one, meaning there exists a structure inside another structure and the inner one can’t exist without the outer one, and so on. But my point is that as a junior developer, you might not see that, because you haven’t worked on systems before and you don’t have an idea how to change big systems. That’s why you might change something and think you fixed a small bug, but without even knowing, you broke some other part of the system, because you disturbed the harmony between different parts of it.
By harmony, I mean the health of a system. To have a healthy system, all the parts of it should be in harmony with each other. Human health works like that as well. I remember once I had a toothache so bad that it rose my temperature, and on top of that, I got a terrible headache, and once I fixed a tooth, it all went away.
Everything is interconnected. If you want to see the most complex application, look at yourself and your body. It is a system of unthinkable complexity. You, as a developer are trying to build systems from scratch, and there are underlying principles in all the systems that you should know to succeed in that. Because of that, the best software developers not only learn from other developers, but they also notice that they can learn from other areas as well because the structure is the same, content is different.
That is the first distinction that I want you to make:
Structure vs Content
You see that all around you, but you don’t notice it. Everything has structure and content, and the structure has a higher-order reality than its content.
For example, the structure of a book is the paper itself. Also, how chapters are organized, how the book is made, what color is the text printed in, the symbols inside the book, and so on. The content is the actual narrative and content of the book, the meaning of the words written inside.
And notice, you can have hundreds of books with the same structure and different content. The structure has a higher-order reality, so to say.
Also, when you watch TV, notice that the structure is the TV screen itself, and the pixels on it. The content is the meaning you give to the colored pixels that you see on the screen. You don’t give meaning consciously, it happens unconsciously, without you noticing it. The content is a movie itself that you watch on the screen. But for the movie to happen, first, there should be a TV screen right?
There is also a structure to success in general. You can read biographies of successful people, and you will find similarities in their stories. That is the structure! The author doesn’t explicitly tell you that this was the structure of a successful person. It is an underlying pattern that you need to read between the lines to understand and then you need to see it from a zoomed-out perspective to have a big picture understanding of it. Just like as a junior developer needs to look at his project from a zoomed-out perspective, to have an idea of how it is structured.
And you know what’s the most important structure that you need to notice?
It’s yourself (more on that at the end).
Every application has a structure, but it also has content. We call the content business logic or stuff that is specific to that domain. And a good developer must be aware of both when he or she is developing an application or else bugs are inevitable.
As software developers, we often get lost in the minutiae of development, technologies, and so on. And we don’t see our work as building structured systems that need to obey certain rules, especially at the beginning of our career.
Those rules are designed to build better structures. We call those software principles (SOLID, KISS, YAGNI, etc), design and architectural patterns, and so on. Those are the rules to build healthy software. By healthy, I just mean software that works without problems.
We call bugs the things that break stuff in our applications right? Bugs happen because our structures are poorly written. You can fix a bug without changing the system, just like I can fix my toothache by holding a block of ice against my cheek, but once that ice melts, toothache returns because I didn’t make any structural changes.
When we make structural changes to improve the quality of our applications, we call that refactoring. In a sense, a doctor does exactly that to my teeth, because to maintain health, I need to structurally change stuff all the time because stuff gets damaged as time goes by.
The same is true for applications as well. That’s why we need to look at software as a living organism that requires maintenance and improvement to keep and maintain healthy systems.
Another distinction that I want to make is this:
Going meta and seeing the structure
Sometimes it’s crucial to see the structure where you only see the content from the beginning. As I said, the structure has a higher-order reality and without it, you can’t have content. So to fully understand systems, we need to go meta and see the structure.
To fully understand the projects that you work on as a developer, go meta and see the structure.
Going meta means looking at processes from a bird-eye view and seeing the content from above. How it is structured? What are the nested structures and how does all that interconnect?
Do you want to stay healthy or improve your health? Just go meta and see the structure of your health. What do you eat daily? Do you exercise? Or are you sitting on a chair in front of a screen all day every day?
Do you want to become a better developer? Study how structures are being built. Study patterns and all the ways you can improve your systems, and I don’t just mean software.
But as I mentioned, the most important structure that you can notice and learn is yourself. For that, check out my other articles (Thoughts on Psychological Well-Being, From Mind Full To Mindful, You and Your Projecting Mind), and do your own research into Contemplative Practices and Traditions. And if you notice a structure of yourself, and then change it over time, you’ll understand that you were as clueless about yourself your whole life as you are on your first day in a new job when they add you to a new project to work with.