“The Message Is the Application (TMITA)” is an interesting design pattern. I’d like to discuss it’s challenges.
The inspiration for this post comes from reading the masterpiece Righting Software by Juval Lowy. In the book Juval teaches the basics of decomposition and Service-Oriented Architecture (SOA) and design. After teaching the basics Chapter 5 is an example. The example leaps off the deep end and uses TMITA design pattern. I wrote this article because book club discussions about the example made it clear that people were having difficulty following along. The reason I came up with is the complexity of TMITA…
I’ve not been coding as much as I should because as long as coronavirus has everything out of wack I’m trying to take care of some personal projects. But I am still coding and thinking about code. One of the things about being here at home is that I’m using my home automation stuff a lot more and make small tweaks to it. This means modifying code that I haven’t touched in more than a year, sometimes 5 years or more.
The experience of modifying code you haven’t worked on for so long that you don’t remember writing it is…
C# is not a functional language. I love C#. It can be highly productive. But there’s a dirty secret, existing code often sucks and every day others create more existing code.
Functional programming can help. It’s easy for it to be too complicated and there’s definitely a learning curve. I’ve noticed that developers that learn functional programming first and then are exposed to OOP/Procedural tend to be better at abstraction and logic, better at OOP, procedural, and functional.
Can we introduce just enough functional to be faster with higher quality but not so much that we can’t use existing frameworks…
TLDR; I demonstrate a common technique for making the most of C#’s type inferences shortcomings to do some functional programming.
When we want to apply multiple Maybe<T>
objects to a function it might not be obvious as to how we should do it. In JavaScript you can curry the function and then send in parameters one at a time. That’s illustrated very well in this article in the section on the .ap()
function:
https://jrsinclair.com/articles/2016/marvellously-mysterious-javascript-maybe-monad/
I tried doing this in C#. Currying a function is fairly easy, and it’s particularly easy if all you need is a partial function as Jon…
Trust me when I tell you that your team’s first instinct will be to build a data service. Please resist the temptation. We’ll talk more about that in a minute.
You’re effort to build services should begin by documenting your business workflow. Not the workflow of one of your applications. We’re talking about the workflow of your business; the processes and decisions you would go through if doing your business manually.
The processes in your business workflow should map fairly well to your core-use-cases. These will be the core-use-cases because your business cannot live without them. You’re software has a…
<this is the place where I will put the description of “the system.”>
Please check back later
System design is it’s own set of skills and it’s constantly evolving. There is a great article by Monty Montgomery discussing “Escaping Appland” and how to build systems. Highly recommended.
I was trying to describe the meaning of a “feature” to a friend and they suggested:
“The makeup or appearance of the face or its parts” and “a prominent part or characteristic”, e.g. Pine trees were a feature of the landscape. As a consumer I think we tend to define feature as add-ons to the basic product, e.g. my car has leather seats and a surround-sound music system. Likewise software products often use features to describe additional attributes, e.g. my word processor includes a spelling dictionary feature. Maybe purpose or abilities would be a better english term, e.g. …
Services automate your business processes. It’s true that all software is automation but your core business processes are different. These processes are the heartbeat of your company. Having them available as services allow you to automate your business workflow in a variety of ways. A nightly job may update shipment data. A warehouse app may adjust inventory. A mobile app can be used in the field to enter data. With the processes as services, every contributing subsystem (mac, pc, windows, script, job, 3rd party integration, mobile, web, etc) can use your system in a consistent way.
All too often teams…
What is an “engineering mindset?” I have a very specific understanding of what I think engineering means.
I learned a lot from Juval at the Architect’s Master Class (AMC) but MOST of what we do, as Juval rightly points out in the AMC, is the construction phase, not the engineering phase. We do (classically) both wrong, but if we are to add an “engineering mindset” I think we need to be clear about what that is.
Some suggests that: “Scientists collect data. Engineers deal with constraints and realities.”
Tha’s a bit too vague for me so I’m going to says…
I’ve noticed that creating production quality code, particularly components and services, takes a ton of effort. I use c# and it’s great, but it’s object oriented legacy really makes it hard to write quality code. But I want to go faster and it’s sooo hard.
Over the last year or so I’ve tried many things to go faster. Some of the things that help me go fast (like generics) make the code ugly as hell. Some of the things like inheritance are a nightmare and must be used carefully (far more carefully than most developers realize).
At some point things…