#MoldableDevelopment is a way of programming through which you construct custom tools for each problem.
What does that mean exactly?
Where does it come from?
Why is it relevant?
Read on.
1/
The original idea of #MoldableDevelopment came from the work on Humane Assessment through which I argued that we need custom tools to reason about software systems effectively.
At first, we applied this to inspecting systems. This alone had implications for the development process. For example, for steering agile architecture.
"... software development tools need to support inexpensive creation of domain-specific extensions, and automatically select extensions based on the domain model and the developer’s interaction with the domain model."
5/
Note how context is defined both in terms of the domain and of the developer's interaction with that domain. In particular, the latter emphasizes that the tool must match the individual *after* the problem is known.
6/
Because software is highly contextual, we cannot predict the specific problems people will have. We can predict classes of problems, but not specific problems. That's why ready made tools are never enough. We need to construct tools after we know the problem.
7/
What's a custom tool?
A query can be a custom tool.
A visualization can be a custom tool.
A browser can be a custom tool.
A constraint can be a custom tool.
The key is only that it's made to match the question, and not that the question is made to match the tool.
8/
First, we applied it to inspecting. Then to debugging. Then to search. Then to documentation. Then to editing.
And now, we apply it to adjacent domains.
(I am so looking forward to talk about this one)
13/
(A note: What you see at gtoolkit.com is the second generation of the project.
Also, we actually left the code editor to the very end because we knew we wanted an experience that does not start and is not centered around an editor. More on that another time.)
14/
#gtoolkit is also the first significant system built through #MoldableDevelopment. It is not only the medium to experience moldable development, it is an extensive case study, too. Learning #gtoolkit is essentially indistinguishable from learning #MoldableDevelopment.
15/
We also applied and validated #MoldableDevelopment in industry for more than a decade.
Before @feenkcom, I even took a job to lead the development on the scariest legacy system I could find around just to live with the consequences of my decisions. 3.5 years. It worked.
16/
At @feenkcom we got the chance to work with many challenging situations and systems. Some systems were old. Some systems were brand new. Some were large. Some were small. All required explaining. And all were critical.
A large central database needed to be migrated to a new structure. The challenge: what applications need changing and how? How did we answer? We built a custom tool with which we navigate and query the landscape.
18/
Another example of a legacy challenge: Reverse engineer and port a core part of a critical system.
We were given 1 year. We did it in 1 month.
In the video here @thorgch from Lam Research describes the experience of working with us.
19/
And here is an example for a new system. In this case, we tell a story about privacy by showing the inside of the system. This serves both as a vehicle for dsicovering the domain and as a means to replace a business presentation deck.
20/
These are rather diverse situations. Yet, in all cases, we used exactly the same tools and techniques. Why? Because we are stubborn. And because this is the only way to validate that #MoldableDevelopment works. And it just works.
21/
All this work is tightly related to #gtoolkit. It is the vehicle with which we do our work and it is what we use to teach. We built it because only talking about these ideas was not enough. And because it's just pure fun.
22/
It's also worth noting that along the way we built a few other adjacent things.
For example, we replaced tests with examples and created live documentation.
All this to say that #gtoolkit is interesting for multiple reasons. Still, the most interesting is how it documents the approach with which it was built. If you let it, it can teach you.
An important lesson we learnt while building #gtoolkit is that any boundary in software is arbitrary. The corrolary of it is that once we can make a level explainable (e.g., user interface), we can make any level explainable.
#MoldableDevelopment works at any level of abstraction and for any single development problem. It's for large problems. It's for small problems. And, it just works.
27/
First and foremost, for developers. Oh, are you worried you do not have time to learn it? Legitimate. Then again, think of all the time you spend reading. And then think how that makes you feel. What if you could smile while debugging?
28/
But, it's also for business people and managers. Business people and managers?
#MoldableDevelopment adds a new feedback loop. You should care about it because the previous feedback loops changed the business. This one will do the same.
Interviewing new employees is a two-way street. On the one hand, you want to know them. On the other hand, you want them to know you, too.
It's also useful to remember that the interaction is also an investment on both sides.
1/
While both parties are invested in similar ways, the conversation is not symmetric. For example, the interviewee is likely significantly more emotionally invested.
That's why as an interviewer, I prefer to compensate.
2/
Typically, interviews are optimized for the act of filtering interviewees. In these situations the organization gains the most. The interviewee can at most get in. However, in the worst case scenario is that nobody learns anything.
3/
A while back, I asked “what is architecture?” and I got many responses within just one day. Some serious, some more (bitter-sweet) joking. We can identify some cluster of responses, but even so, there are certainly a dozen distinct perspectives.
That there are many perspectives is not a surprise given that the literature is full with competing definitions. For example, it's not atypical for architecture books to say something like: “there exists many definitions, so here is ours”.
The search for the perfect definition of architecture captured the imagination of several generations by now, yet it still seems to remain elusive. But, what if it’s Ok to have many of them?
By now there is plenty of evidence that both architectures can lead to a “mess”. This only shows that we should not look at these as mechanisms for controlling the said mess” in the first place.
Well, as long as it’s people building the system, of course it’s the people. But, saying that does not get us closer to figuring a way forward though.
2/
Now, what exactly does “mess” mean? The famous spaghetti code?
Mess tends to assume that there is a clean way. And by clean, people typically mean easy to understand and change.
3/
“Developers spend most of their time figuring the system out."
Let’s dissect this a little.
🧵
1/
The oldest reference on the topic I know of dates back to 1979:
Zelkowitz, Shaw, and Gannon. Principles of software engineering and design. Prentice-Hall Englewood Cliffs, 1979.
2/
It said that most of the development time was spent on maintenance (67% in the book).
Granted, the book does not specify how the figure was obtained. Still, it was deemed an important enough problem to attract significant research attention since then.
This is how the software environmentalism crisis looks like. An explanatory thread. 1/
In the software development industry, we focus exclusively on building systems. The conversations are dominated by new languages, new frameworks, new deployment options. And the body of software grows exponentially. At the same time, we are unable to remove old systems. 2/
From this perspective, our software industry behave not unlike the plastic industry: we focus on building without any regards to recyclability. That is not sustainable. And, given the breadth of software’s reach, it is not responsible either. 3/