Interviewer: With the ever-evolving landscape of software development and the growing demand for innovative approaches, we are here to explore how Data Context Interaction (DCI) embodies a better approach, particularly in object-oriented programming and software architecture. Our guest brings valuable knowledge and experience, making this interview a great opportunity to gain deep insights into the power of DCI. So, without further ado, let’s dive right in. Welcome, Nick, and thank you for joining us today!
Nick: Thank you for having me. This is going to be exciting.
Interviewer: You bet. But before we dive into the subject, could you please tell us a bit about yourself and your role within your company?
Nick: Absolutely. I’m Nick Ciolpan, a managing director at Graffino, a Custom Software Development company. I play a dual role at the moment. First, I partner with clients, helping them navigate the evolving landscape of custom software development and nearshoring. I guide them in understanding the best approach to kickstart their product development. My second role is that of a CTO and a technical leader for my team at Graffino, where I help come up with the best technical solutions for our clients.
Interviewer: Let’s start with the basics. What are the core principles of DCI, and how does it differ from traditional approaches to software architecture?
Nick: DCI is a software design and architecture paradigm that builds on Object-Oriented Programming (OOP) principles. It’s not avant-garde but rather a blend of old and new. Unlike traditional approaches that focus on building object hierarchies and categories, DCI challenges these assumptions. It acknowledges that real-world objects often interact in a network-like fashion, and systems are formed by the collaboration of objects with their data and behaviour. DCI separates data and behaviour, making it easier to adapt to changing contexts.
Interviewer: Your explanation clarifies the philosophy behind DCI. Can you provide an example that illustrates the difference between DCI and traditional object-oriented programming?
Nick: Certainly! So, DCI offers a compelling promise – it allows end users to understand code better and empowers developers to align code with human mental models. But why should we seek alternatives to existing tools? The answer lies in the ability to express our mental models effectively. Traditional tools, like Java, fall short in this regard. Research proves this. In an experiment, two groups used Java and DCI to achieve the same tasks. Surprisingly, the DCI group consistently outperformed the Java group, despite a learning curve.
Their measurements were crucial – how easy it was to fix bugs, the number of regressions, and the speed of implementing use cases. Let’s consider architecture resilience. Think of a house. Some elements change frequently, like the paint color. This change doesn’t require rebuilding the walls. In software, DCI separates data (the wall) from function (the paint). Traditional approaches intertwine them, leading to more defects and regressions. Speed matters too. DCI closely aligns code with mental models and use cases, making it easier for non-technical folks to understand the code. You can quickly locate and modify code related to a specific context without navigating complex hierarchies.
In a nutshell, DCI makes code more understandable and adaptable, enabling a seamless connection between business and tech perspectives.
Interviewer: That experiment truly demonstrates the practical benefits of DCI. To dive deeper into the application of DCI, could you share how you’ve incorporated DCI into your software development strategy at Graffino?
Nick: DCI’s strong alignment with agile software development principles has made it a natural fit for our team at Graffino. James Coplien, a key figure in the DCI world, has also contributed significantly to agile practices. We’ve found that DCI helps bridge the gap between technical and business teams. It enables our developers to create code that directly mirrors business scenarios and user stories. This alignment allows us to build systems that are not just robust but also closely aligned with the needs of our clients. We have an agile team that’s been ideal for running architecture experiments successfully. I encourage trying DCI because it challenges the status quo. Some in the software industry stick to the status quo without questioning, but our team values innovation and aims for the best outcomes.
We apply DCI but not to the extreme, as we believe in using the right tools for the job and maintaining a critical approach to technology choices. So, yes, we do apply DCI in practice. Yes. there are cases in which we don’t. We’re trying to not go into the extreme where we have a hammer and everything looks like a nail. And this is the main mission that I’m fighting for. Be critical about the tools and technologies that you’re using and make sure that is your best mind being put there.
Interviewer: It’s evident that DCI has made a significant impact on your approach to software development. Looking ahead, what recommendations do you have for fellow software developers who are considering exploring DCI or similar paradigms?
Nick: My advice is always to question your tools and challenge the status quo. The tech industry is continually evolving, and the most successful developers are those who remain open to exploring new paradigms. Consider DCI as a potential approach in your toolkit, especially when you’re working on complex systems that involve numerous actors and dynamic interactions. In its essence, DCI can be simplified as the concept of objects that are primarily pure data on one side. Imagine an object that contains only the most essential methods specific to that object. For instance, a person object might have a method called “talk.” However, these objects can assume roles that bring with them a broader set of methods tailored for specific tasks. For example, a “public speaker” role requires the object it attaches to have the ability to speak, but it also includes a range of abilities necessary for public speaking, such as operating a presenter remotely. These roles are context-specific. It doesn’t make sense to carry the entire public speaking setup when the person is at home. In this way, the language evolves to revolve around the DCI paradigm, providing a more accurate representation of the real world.
I’m always giving the fulloo.info website as the index for all things DCI. What you will find there is a white paper which I suggest you start with. And then take a look at the DCI implementation that is closest to your current tool set. Additionally, explore the DCI implementation that best aligns with your current toolset; there are implementations available for nearly every popular programming language. For instance, Marvin is designed for C# developers, and Trygve was created to resemble Java. It’s not just because of Java’s popularity within the ecosystem, but also because of its widespread use. The creator believed that if you’re already comfortable with Java’s syntax and its characteristic use of brackets, you’ll find it easier to grasp the DCI superset in that language.
Interviewer: That’s excellent advice. Before we conclude, do you have any upcoming events or projects related to DCI that our audience might be interested in?
Nick: Indeed, we have an exciting event coming up in November from the 6th to 10th. James Coplien, a significant figure in both technology and agile management, will be joining us for a special event. If you have ever thought about getting yourself certified or learning more about Scrum, this is a unique opportunity, right? I mean, you could have this course online or physically somewhere with someone completely anonymous, or you could have it with someone who is part of creating the whole Scrum philosophy and culture. It’s an excellent opportunity for those interested in Scrum certification and, of course, another chance to delve into the world of DCI.
Interviewer: Fantastic! Thank you, Nick, for sharing your valuable insights into DCI and how it can transform software development. It’s been a pleasure having you on the show today.
Nick: Thank you! It’s been a pleasure being here and discussing a topic I’m passionate about.