Recently a friend discovered this blog. She asked me why do I write so much about Expressive Design. This is not the first time I’m asked this so I decided to write down my answer. I will try to give some overview of the topic and link to the many articles in this blog about […]
Archive for the 'software architecture' Category
Letting two systems share a single database is one of the worst, most heavily coupled methods for systems integration. Unfortunately it’s also one of the most popular. It is very usual for a developer to have to talk to someone else’s database and quite commonly this accidental complexity cannot be removed as there’s often too […]
We just had our ThoughtWorks Australia Team Hug. It’s some sort of internal conference where everyone from Sydney, Melbourne, Perth and Brisbane get together with some guests from overseas to get drunk (by the way, we are hiring). We also have presentations and many other work-related sessions.
This year I’ve held a session on a quite […]
As we saw in Part I, abstractions are everywhere. Unfortunately, even though everyone is more than happy to reuse abstractions provided by someone else I often see people failing to identify those in their own code.
Most people tend to create abstractions found using Russ Abbott’s method of using the textual description of a problem to […]
Update: Part II is here.
Most complex tasks are solved using abstractions. To create an abstraction one groups lower-level concepts, what I will call primitives in this text, and make them interact in a pre-defined way.
Abstractions are present at all levels in a system. Computers work based on electric signals. To reduce the Essential Complexity we […]
Last week, Cauê and I were refactoring some classes in our systems and faced an interesting situation.
In our application we have a notifications system. It is quite simple; notifications are read from a text file and shown in a small information box in the home page. The MVC controller –it’s a Java application and we […]
At ThoughtWorks, our preferred way to start a project is by doing a set of workshops and sessions with stakeholders for about two weeks. That’s what we call Inception. After the Inception we usually have a product backlog for the project and are ready to start writing production code.
During that period, we often come up […]
Weeks ago, some people in the Ubuntu community got a bit disappointed with the distribution’s core team:
> We are supposed to be a community, we all use Ubuntu and contribute
> to it, and we deserve some respect regarding these kind of decisions.
> We all make Ubuntu together, or is it a big lie?
We all make […]
Over the years I’ve been part of many recovery projects. What I mean by “recovery project” is usually a project-inside-a-project that is started when the original project was clearly not going to meet its objectives. Each project fails in a unique way, but often failure is characterised by not fulfilling the stakeholder’s expectations.
There are […]
Over the past years I’ve held many workshops on Domain-Driven Design. We had more than one hundred people on those sessions, and feedback was often pretty good. After my last run I told my business partner that this was my last time running those workshops.
I think that Domain-Driven Design is one of the most […]