Mario Cardinal

"The real voyage of discovery consists, not in seeking new landscapes, but in having new eyes" – Marcel Proust

Leave a comment

Electronic version of my book is now available

After several years of work, I come now to the finish of my book. The ebook version of, Executable Specifications with Scrum: A Practical Guide to Agile Requirements Discovery, is now available online at:


Leave a comment

Thinking with objects

In this post, I discuss the role of abstraction in my work as a software architect. I explain how the work of Grady Booch has influenced me to create abstractions with object-oriented technology. In my opinion, thinking with objects is the most important abstraction process for software architects.

Even though I am an entrepreneur, I worked most of my life as a software architect.  Just like the product owner trawls desirements incrementally, step-by-step, using a vision-centric and an emergent iterative practice, over the years, I learned to develop emerging architectures.

Software architects specify an emergent architecture in two ways:
•    By addressing non-functional requirements in small chunks and in a timely manner.
•    By designing structural abstractions through thoughtful reduction and organization.
The architect leads the design of the structural abstractions upon which the software solution is built by the team. An abstraction is a simplified description of a concept which captures the essential elements of that concept while suppressing all other elements. The boundary of the abstraction must be well-defined so that other abstractions may rely on it. This cooperation between abstractions relies on the contract of responsibilities that an abstraction provides. In programming, an abstraction is the process by which data and programs are defined with a representation similar in form to its meaning, while hiding away the implementation details. Abstraction tries to reduce and factor out details so that the development team can focus on a few concepts at a time.

One of the design process that has most influenced my work as a software architect is thinking with objects. In my opinion, thinking with objects is the most important abstraction process for software architects. One of the major books that enable me to think with objects is “Object-Oriented Analysis and Design with Applications” from Grady Booch. The first edition of this seminal book was instrumental in making object-oriented technology a practical reality.

Twenty five years later, I still follow the work of Grady Booch. The other day while returning from the DevTeach conference, I was listening the very interesting “On Computing” podcast. According to Grady, the story of computing is the story of humanity. I can only agree with this statement.