I gave a talk at #QConPlus on "Moldable Development by Example".

A summary.

1/ Image
The talk consisted mostly of two stories. Two examples.

I started with a little story inspired by our recent experience of going through the Open edX system.



2/
It went like this. Imagine you have a system written in Python and you want to split it for various reasons.

You'd first look for components that already exist. In this case, the system already seems to have top components available (as documented by top folders).

3/ Image
And then you'd look for dependencies. When we think of dependencies, we typically think of how a system calls or sends a message to another part.

But, there are dependencies that are less obvious.

For example, feature toggles can pose a challenge.

4/
Feature toggles? Yes, feature toggles.

In this particular system, feature toggles are used in many places, as highlighted on this treemap (sorry, @swardley. I know it's not actually a map, but that's what they called this before that distinction was obvious :))

5/ Image
Having many usages of feature toggles is not a problem per se, but it can become relevant if a toggle is defined in one component and used in another, as that would induce a dependency.

That's why it would be ideal to see something like this.

6/ Image
To draw a graph like this, we'd need to know how toggles are defined and used. But, while a feature toggle is a generic concept, the way to define and use it is framework specific. To make matters more interesting, in our system there are actually 3 different ways to do that.

7/
This means we can only create the tool after we know the specifics. You can't download it. You must build it. And that's the gist of #MoldableDevelopment.

(the alternative is to manually read code, but that's a too expensive data mining tool)



8/
Back to our case study, the picture is indeed generated through a custom tool. Looking at it, we can already see that there are a significant amount of cross component toggle usages. And that there seem to be cycles, too.

This is already interesting, but ...

9/ Image
To bridge the gap to action, we need more details. It would be great to go from the picture to the places in code that induce the dependencies.

Something like this.

10/ Image
This can be achieved through a little model and a few object inspectors with custom views.

The model is not more complicated than the model already used by the runtime of the system, only in this case it's retrieved statically.

11/
This demo is based on #GToolkit, the moldable development environment that we designed specifically so that we can put together interactive custom tools inexpensively.

(It's free and open source, too. Go look at it: gtoolkit.com)

12/ Image
The second story is based on a recent issue we actually had with the continuous integration server that builds #GToolkit itself:
github.com/feenkcom/gtool…

Namely, we had an error during the build, and I wanted to highlight the error message from the console.

13/ Image
(Incidentally, I showed how I access the Jenkins server right from the knowledge management / multi language system embedded in #GToolkit)



14/ Image
Ok, long story short, I extended the tool in place to emphasize the error.

15/ Image
Taking a step back, these two case studies look quite distinct. On the one hand, we have something we'd denote as architecture. On the other hand, we have some API calls and monitoring.

Yet, they were served through very similar custom tools and flow ...

16/ ImageImage
That is likely only possible if they are actually not that distinct. That's what we show with #GToolkit. That we can look at the development environment not as a set of features, but as an expressive language that can accommodate many kinds of use cases.

17/
Software development problems are unforeseeable, so answers should not be confined to predefined boxes. We need a #MoldableDevelopment environment.

18/
The talk ends with an overview of #MoldableDevelopment as seen through a #WardleyMap, and with hinting at the far reaching implications towards compressing communication and decision making.

19/ Image

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Tudor Girba

Tudor Girba Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @girba

17 May
Personal computing was conceived to be personal. Personal, as in experiencing computation the way it fits you. Your context should come first and dictate what is interesting. The experience should follow.

1/
For example, consider where you are reading this tweet. Or where you are writing a reply to it. It's not unlikely that you are doing it exactly in the same way many other millions of people are doing it: using the generic interface that Twitter offers.

2/
Of course, this is convenient. At the same time, it might not match your actual needs. For example, say you like writing longer threads. Longer threads imply more consideration and possibly longer time to write. And, you may want to handle multiple drafts in parallel.

3/
Read 30 tweets
13 Apr
#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.



2/
The idea of custom tools is a significant departure from the typical software engineering canons which often argue the opposite.

Still, it is relevant because it tackles the single largest expense in software development: figuring the system out.



3/
Read 31 tweets
11 Apr
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/
Read 10 tweets
12 Mar
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.



1/
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”.



2/
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?



3/
Read 22 tweets
3 Mar
Tell us about programming languages that people might perceive to be extinct, but are still around today.

Let’s see how many we get.

👇
Read 4 tweets
28 Feb
The monolith vs microservices debate…

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.

The answer lies somewhere else.

1/
“It’s the people!”

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/
Read 11 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Thank you for your support!

Follow Us on Twitter!

:(