Using Citizenship and Subdomains to Improve Decision-making
Prioritize more effectively using programming citizenship and subdomains concepts
Prioritize more effectively using programming citizenship and subdomains concepts
Key takeaways
Programming citizenship and subdomain concepts categorize entities within a system based on their level of importance.
Identify the core areas of your work or product and focus your time and resources on them while acknowledging the supporting and generic parts.
Prioritize work on the core areas, limit work on the supporting ones, and outsource, deprecate, or demote the generic features.
What is Citizenship in Software Development?
In software development, we use the concept of first-class and second-class citizens to denote entities within a system with different levels of importance. To understand this concept, consider a restaurant management system as an example.
Imagine building a restaurant management system that keeps track of the menu, ingredients, orders, and payments. To represent these concepts, we create elements such as Menu, Ingredient, Order, and Payment. We want to add a new feature that sends notifications to customers when their order is ready. To do this, we need to represent the concept of notification in code with elements like “message” and “recipient.”
In this scenario, the Order class is a first-class citizen because it’s a core concept in the system. The restaurant management system needs it to function correctly. In contrast, the Notification class is a second-class citizen because it’s a supporting concept. It’s not essential to the system’s core functionality but helps enhance it.
A Note on Subdomains
Eric Evans’ book on Domain-driven design outlines three subdomains: Core, Generic, and Supporting. The Core subdomains are the essence of the product, and companies should focus most of their efforts and innovation here to maintain a competitive advantage. In the restaurant example, the Core subdomain could be the recipes and ingredients.
The Generic subdomains are complex but ordinary, and everyone needs them. Companies should prefer using existing solutions for these subdomains. In the restaurant example, the Generic subdomain could be the order management system.
Finally, Supporting subdomains are usually simpler but require creativity and uniqueness. They don’t provide a competitive advantage but support the core business to a certain level. For the restaurant example, the Supporting subdomain could be the design or an exceptional hosting experience.
Why is this Important?
As Product Managers, and in almost every role, we face numerous requests and demands. We strive to meet deadlines and deliver value while keeping everything running smoothly.
By applying the concepts of citizenship and subdomain types from the software world, we can prioritize and focus on impactful tasks more effectively. In times of stress, it’s helpful to:
Define the core areas that are crucial to the competition and value proposition
Acknowledge the supporting parts that are required but only up to a certain level of quality
Question the generic features and the resources they take
Ideally, we should work on the Core areas, limit work on the Supporting ones, and outsource or deprecate the Generic features.
To illustrate this point, let’s consider the restaurant owner. She should always keep her recipes and ingredients above the competition and have a working (and probably off-the-shelf) order management solution while creating just enough complementary features to enhance the customer experience.
Summary
Using a restaurant management system as an example, we covered the concepts of first-class and second-class citizens and subdomain types in software development.
It is essential to understand this concept as it can help us prioritize and focus on impactful tasks better, especially in times of stress and high demand. We can allocate resources more effectively by identifying the core areas of a product or service and acknowledging the supporting and generic parts.