Inheritance Architecture
How Pega Reuses and Resolves Rules in the Alpha Bank Nexus Application
In the previous parts of this series, we designed the overall architecture of the Alpha Bank Nexus application, including Case Types, Data Architecture, and Integration Architecture.
But there is an important question that appears as the application grows:
This is where inheritance and rule resolution become extremely important.
In Pega, inheritance is not simply about creating a parent class and a child class. A well-designed Pega application uses several related mechanisms:
- Class hierarchy and pattern inheritance
- Directed inheritance
- Application and built-on application architecture
- Ruleset hierarchy and Ruleset Stack
- Rule specialization
- Rule availability
- Circumstance and other rule-resolution factors
- Runtime rule resolution
The most important thing to understand is that these mechanisms solve different problems.
Pega Application Architecture – Part 5: How class inheritance, directed inheritance, application inheritance, ruleset hierarchy, and rule resolution work together in Alpha Bank's Nexus application.
1. Why Inheritance Matters in a Pega Application
Imagine Alpha Bank has the following Case Types:
- CustomerOnboarding
- AccountOpening
- CustomerMaintenance
- AddressChange
- CardRequest
- LoanApplication
- FraudReview
- KYCReview
- AccountClosure
Many of these Cases may need common behavior:
- Customer identification
- Case creation behavior
- Audit information
- Common validations
- Common notifications
- Common security behavior
- Common error handling
- Common business utilities
If developers copy the same rule into every Case Type, the application quickly becomes difficult to maintain.
Without inheritance
CustomerOnboarding → ValidateCustomer AccountOpening → ValidateCustomer LoanApplication → ValidateCustomer CardRequest → ValidateCustomer KYCReview → ValidateCustomer
Now the same business logic exists in multiple places. A change to the validation may require changes in several rules.
With inheritance, Alpha Bank can place genuinely common behavior at an appropriate reusable level and allow specialized Case Types to inherit it.
Alpha-Banking-Work
│
├── CustomerOnboarding
├── AccountOpening
├── LoanApplication
└── CardRequest
Common ValidateCustomer rule
│
└── Defined at the appropriate reusable level
2. The Four Concepts You Must Not Confuse
One of the biggest sources of confusion in Pega architecture is using the word inheritance to describe several different mechanisms.
| Concept | Main Question | Alpha Bank Example |
|---|---|---|
| Pattern Inheritance | Which parent classes can this class inherit from? | LoanApplication → Alpha-Banking-Work |
| Directed Inheritance | Which explicitly specified class can provide additional reusable rules? | Alpha banking class explicitly inheriting from an applicable Pega class |
| Application Inheritance | Which application capabilities does Nexus build on? | Nexus → Alpha Banking Framework → Alpha Enterprise → Pega Platform |
| Ruleset Stack | Which rulesets and versions are available and in what precedence? | Nexus rulesets → Alpha Banking → Alpha Enterprise → Pega Platform |
3. Alpha Bank's Complete Class Architecture
For our Alpha Bank application, we established the following class structure. The application name is Nexus, but Nexus is not part of our class namespace.
Alpha
│
└── Alpha-Banking
│
├── Alpha-Banking-Work
│ │
│ ├── Alpha-Banking-Work-CustomerOnboarding
│ ├── Alpha-Banking-Work-AccountOpening
│ ├── Alpha-Banking-Work-CustomerMaintenance
│ ├── Alpha-Banking-Work-AddressChange
│ ├── Alpha-Banking-Work-CardRequest
│ ├── Alpha-Banking-Work-LoanApplication
│ ├── Alpha-Banking-Work-FraudReview
│ ├── Alpha-Banking-Work-KYCReview
│ └── Alpha-Banking-Work-AccountClosure
│
├── Alpha-Banking-Data
│ │
│ ├── Alpha-Banking-Data-Customer
│ ├── Alpha-Banking-Data-Account
│ ├── Alpha-Banking-Data-Address
│ ├── Alpha-Banking-Data-Product
│ ├── Alpha-Banking-Data-KYC
│ ├── Alpha-Banking-Data-Loan
│ ├── Alpha-Banking-Data-Card
│ └── Alpha-Banking-Data-Transaction
│
└── Alpha-Banking-Int
│
├── Alpha-Banking-Int-CoreBanking
├── Alpha-Banking-Int-KYC
├── Alpha-Banking-Int-AML
├── Alpha-Banking-Int-CreditBureau
└── Alpha-Banking-Int-Card
This structure gives us a business-oriented class hierarchy. It also creates natural places where rules can be reused.
4. Pattern Inheritance — The Most Important Inheritance Concept
Pattern inheritance is automatic. Pega uses the class name structure to determine the parent classes available for rule reuse.
For example:
Alpha-Banking-Work-LoanApplication
│
▼
Alpha-Banking-Work
│
▼
Alpha-Banking
│
▼
Alpha
│
▼
@baseclass
The important idea is that the child class can reuse appropriate rules defined higher in the hierarchy.
Example
Suppose Alpha Bank defines a common customer validation rule at:
Alpha-Banking-Work
ValidateCustomer
The Loan Application Case can potentially reuse that rule because:
Alpha-Banking-Work-LoanApplication
│
└── inherits from
│
▼
Alpha-Banking-Work
│
└── ValidateCustomer
We did not copy the rule into every Case Type. The child Case Type reuses the rule through the class hierarchy.
5. Where Should a Rule Live?
This is one of the most important architecture decisions.
A useful design principle is:
For example, suppose the rule:
ValidateCustomerIdentity
is applicable to almost every Alpha banking Case. A higher reusable class may be appropriate.
But suppose we have:
CalculateLoanDebtToIncomeRatio
That is clearly loan-specific behavior. Putting it in the generic Work class would make the parent class less meaningful and potentially expose unrelated behavior to other Cases.
It belongs at a level where the rule's business applicability is accurate.
6. Rule Reuse Example — Customer Validation
Let's use a practical Alpha Bank example.
When a customer opens an account, applies for a loan, or requests a card, Alpha Bank needs to validate customer information.
Instead of creating separate copies:
CustomerOnboarding → ValidateCustomer AccountOpening → ValidateCustomer LoanApplication → ValidateCustomer CardRequest → ValidateCustomer
we can identify what is truly common and place that logic at an appropriate reusable level.
Then LoanApplication can add loan-specific validation without duplicating the common logic.
Alpha-Banking-Work
│
├── ValidateCustomer
│
└── common banking behavior
Alpha-Banking-Work-LoanApplication
│
├── loan-specific validation
├── credit validation
└── debt-to-income validation
7. What Can Be Reused Through Class Inheritance?
Depending on the rule type and the class structure, child classes can reuse rules defined at parent levels.
Examples include:
- Properties and data-related rules
- Activities
- Sections and UI rules
- Flows and processes
- Decision rules
- Data Transforms
- Validations
- When rules
- Expressions
- Other reusable application behavior
The exact behavior is rule-type dependent, so inheritance should not be treated as a generic "copy everything from the parent" mechanism.
8. Directed Inheritance — When the Parent Is Explicitly Specified
Pattern inheritance follows the class-name hierarchy. Directed inheritance is different.
With directed inheritance, the parent class is explicitly specified on the class definition. This allows a class to reuse rules from another class that is not simply its automatic pattern-inheritance parent.
This is particularly useful when an application class needs to reuse standard Pega rules or rules from another functional hierarchy.
Conceptual Example
Alpha-Banking-Work-LoanApplication
│
│ Pattern inheritance
▼
Alpha-Banking-Work
│
│ Pattern inheritance
▼
Alpha-Banking
+
Explicit directed inheritance
│
▼
Applicable Pega Work/Data class
or another explicitly selected reusable class
Directed inheritance should be used deliberately. It should have a clear functional reason rather than becoming a shortcut for an unclear class hierarchy.
9. Pattern Inheritance vs Directed Inheritance
| Pattern Inheritance | Directed Inheritance |
|---|---|
| Automatic | Explicitly specified |
| Based on class naming/hierarchy | Based on an explicit parent class relationship |
| Promotes business-oriented reuse | Useful for functional reuse outside the automatic business hierarchy |
| Example: LoanApplication → Alpha-Banking-Work | Example: Alpha application class explicitly referencing a reusable Pega class |
10. The Most Important Part — How Pega Searches for a Rule
This is where inheritance connects directly to Rule Resolution.
Suppose Bob is working with:
Alpha-Banking-Work-LoanApplication
and the application requests a rule named:
ValidateCustomer
Conceptually, Pega has to answer several questions:
- What Rule Type is being requested?
- What is the current class?
- Which rulesets are available to this operator?
- Which candidate rules exist?
- Which classes are in the applicable inheritance path?
- Are the candidate rules available?
- Are there circumstances or other specialization conditions?
- Which candidate has the appropriate precedence?
- Which rule should execute?
11. Rule Resolution — The Runtime Mental Model
A useful mental model for the Alpha Bank Nexus application is:
John │ ▼ Operator / Access Group │ ▼ Application + Application Version │ ▼ Ruleset Stack │ ▼ Rule Type + Rule Name │ ▼ Current Class │ ▼ Class Hierarchy │ ▼ Pattern Inheritance │ ▼ Directed Inheritance where applicable │ ▼ Candidate Rules │ ▼ Availability / Specialization / Circumstances │ ▼ Selected Rule │ ▼ Runtime Execution
This is the architecture-level view of how a Pega rule becomes executable behavior.
12. The Ruleset Stack Is Not Class Inheritance
This distinction is extremely important.
The class hierarchy tells Pega about the class-based inheritance path. The Ruleset Stack determines the rulesets and versions available to the application session and their precedence.
A conceptual Nexus stack might look like:
Nexus Implementation Rulesets
│
▼
Alpha Banking Framework Rulesets
│
▼
Alpha Enterprise Rulesets
│
▼
Pega Platform Rulesets
The exact deployed names and versions depend on the implementation. The important architectural principle is the separation between:
- Class hierarchy — where the rule applies conceptually
- Ruleset stack — which rulesets/versions are available and their precedence
- Rule resolution — which specific rule candidate is selected
13. Alpha Bank Application Inheritance
There is another inheritance concept at the application level.
Nexus can be designed as the implementation application for Alpha Bank while building on reusable application capabilities where those capabilities genuinely belong in a framework or enterprise layer.
Pega Platform
│
▼
Alpha Enterprise
│
▼
Alpha Banking Framework
│
▼
Nexus
Alpha Bank Banking Application
This is application inheritance / built-on application architecture. It should not be confused with:
Alpha-Banking-Work-LoanApplication
│
▼
Alpha-Banking-Work
The first is an application composition relationship. The second is a class inheritance relationship.
14. Application Inheritance vs Class Inheritance vs Rulesets
| Layer | Purpose | Alpha Bank Example |
|---|---|---|
| Application | Reuse application capabilities | Nexus built on Alpha Banking Framework |
| Class | Organize and reuse rules through class hierarchy | LoanApplication → Work |
| Ruleset | Package, version, and make rules available in a controlled stack | Nexus → Alpha Banking → Enterprise → Platform |
| Rule Resolution | Select the applicable rule at runtime | Select the appropriate ValidateCustomer rule |
15. A Complete Alpha Bank Rule Resolution Example
Let's make this concrete.
Bob opens a LoanApplication. During processing, the application needs the rule:
ValidateCustomer
Assume the following rules exist:
| Class | Rule | Purpose |
|---|---|---|
| Alpha-Banking-Work-LoanApplication | ValidateCustomer | Loan-specific validation |
| Alpha-Banking-Work | ValidateCustomer | Common banking validation |
| Alpha-Banking | ValidateCustomer | Broader banking behavior |
The rule at the LoanApplication level is the more specialized candidate in this inheritance path, assuming the other rule-resolution criteria are satisfied.
If that rule does not exist or is not an applicable candidate, Pega can continue through the inheritance path and consider applicable rules at higher levels.
16. Rule Resolution Uses More Than Inheritance
This is an important interview and production concept.
Pega's rule-resolution process considers several inputs, including:
- Rule Type
- Rule name / purpose
- Apply To class
- Operator's Ruleset Stack
- Class hierarchy
- Rule availability
- Circumstances and specialization where applicable
- Access roles and privileges in relevant rule-resolution scenarios
Therefore, saying:
is an oversimplification.
A more accurate explanation is:
17. Data Class Inheritance
Inheritance is not limited to Case Types. We can also apply thoughtful inheritance to the Data layer when the business model genuinely supports specialization.
For example:
Alpha-Banking-Data-Account
│
├── Alpha-Banking-Data-CheckingAccount
│
└── Alpha-Banking-Data-SavingsAccount
The parent can contain truly common account behavior and properties, while the child classes can contain account-type-specific behavior.
However, inheritance should not be introduced merely because two Data Objects happen to share several properties.
18. Integration Class Inheritance
The same principle applies to the integration layer.
Alpha-Banking-Int
│
├── Alpha-Banking-Int-CoreBanking
├── Alpha-Banking-Int-KYC
├── Alpha-Banking-Int-AML
├── Alpha-Banking-Int-CreditBureau
└── Alpha-Banking-Int-Card
Common integration behavior can be separated from system-specific behavior.
For example, common standards may include:
- Correlation handling
- Common logging patterns
- Common error categorization
- Common monitoring metadata
- Common integration utilities
But Core Banking-specific request and response behavior should remain associated with the Core Banking integration rather than being placed into a generic banking integration parent simply for convenience.
19. Inheritance and Specialization
Alpha Bank may start with common behavior and later require specialized behavior.
For example:
Common banking validation
│
├── CustomerOnboarding
├── AccountOpening
└── LoanApplication
│
└── additional loan-specific validation
The architecture should allow specialization without forcing developers to copy the entire parent implementation.
This is one of the major benefits of a well-designed class hierarchy.
20. Inheritance and Ruleset Specialization
Class hierarchy is only one dimension of specialization. Ruleset organization also matters.
A rule can be associated with a particular class and ruleset. The Ruleset Stack controls which rulesets and versions are available to the current application context.
This means two developers could look at the same rule name and class and still need to consider the active Ruleset Stack to understand which rule instance is applicable.
21. A Practical Dev Studio Example
Suppose we are working on:
Alpha-Banking-Work-LoanApplication
In Dev Studio, an architect can inspect the class structure and determine:
- The current Apply To class
- The parent class
- Any relevant directed inheritance
- The rules defined directly against the class
- The rules inherited from parent classes
- The application's Ruleset Stack
- The available rule versions
This is one of the reasons understanding the App Explorer and class hierarchy is important for Pega developers and architects.
22. The Most Common Inheritance Mistake — Putting Rules Too High
Suppose a developer creates:
Alpha-Banking-Work
CalculateLoanInterestRate
because the developer wants to reuse it in two loan-related Case Types.
But Alpha-Banking-Work represents the broader banking Work domain. The rule is not meaningful for CustomerOnboarding, CardRequest, FraudReview, or AccountClosure.
The parent has now become polluted with specialized business behavior.
A better architecture would place the rule at the narrowest level where it is still genuinely reusable.
Alpha-Banking-Work
│
├── CustomerOnboarding
├── AccountOpening
│
└── Loan-related reusable layer
│
├── LoanApplication
└── other applicable loan Cases
The exact hierarchy depends on the real Alpha Bank business requirements. The principle is to avoid putting unrelated behavior into broad parent classes.
23. The Opposite Mistake — Putting Everything at the Child Level
The opposite problem is also common.
Developers sometimes create the same rule separately for every Case Type:
CustomerOnboarding → ValidateCustomer AccountOpening → ValidateCustomer LoanApplication → ValidateCustomer CardRequest → ValidateCustomer KYCReview → ValidateCustomer
If the business behavior is genuinely common, this creates unnecessary duplication.
The architect should ask:
24. Avoid Deep and Unnecessary Class Hierarchies
Inheritance is powerful, but deeper is not automatically better.
A hierarchy such as:
Alpha
└── Banking
└── Retail
└── Consumer
└── Lending
└── Personal
└── Unsecured
└── Premium
└── LoanApplication
can become difficult to understand if every level exists only to reuse a few rules.
A good architecture should make the reason for each level understandable.
25. Inheritance Is Not the Same as Copying
This is worth emphasizing.
When a child Case uses an inherited rule, Pega is not creating a second independent copy of that rule for every Case Type.
The architecture allows the rule to remain defined at its reusable level while the child uses it through rule resolution.
26. Inheritance Across the Alpha Banking Layers
We can now look at our complete architecture:
NEXUS
Alpha Bank Application
│
Application Architecture
│
┌──────────────┼──────────────┐
│ │ │
Work Data Int
│ │ │
▼ ▼ ▼
Case Types Data Types Integrations
│ │ │
└──────────────┼──────────────┘
│
Class Hierarchy
│
Pattern Inheritance
│
Directed Inheritance
│
Rulesets
│
Rule Resolution
│
Selected Rule
│
Runtime
This is how inheritance becomes an architecture concern rather than just a developer feature.
27. Runtime Example — John Creates a Customer Onboarding Case
Let's walk through one complete runtime scenario.
Step 1 — John logs in
John's Operator record and Access Group establish his application context.
Step 2 — Nexus becomes the application context
The application and version establish the application configuration and associated Ruleset Stack.
Step 3 — John creates CustomerOnboarding
The Case operates in:
Alpha-Banking-Work-CustomerOnboarding
Step 4 — A rule is requested
Suppose a section, flow, activity, decision, or other rule references:
ValidateCustomer
Step 5 — Pega resolves the rule
Pega evaluates applicable candidates using the rule-resolution mechanisms.
Step 6 — The selected rule executes
The Case does not need to know whether the selected rule was defined directly on CustomerOnboarding or inherited from a reusable parent level.
28. How to Troubleshoot "Why Is Pega Using This Rule?"
One of the most common questions in a real Pega project is:
Do not immediately change the rule. First investigate the resolution path.
-
Identify the Rule Type.
A section, activity, decision rule, data transform, privilege, and other rule types have different rule structures and resolution behavior. -
Check the Apply To class.
Make sure the rule is created against the class you intended. -
Inspect the class hierarchy.
Determine where the current Case class sits in the inheritance structure. -
Check the Ruleset Stack.
Verify which rulesets and versions are available to the current application context. -
Check rule availability.
A rule that exists but is not available may not be an executable candidate. -
Check specialization and circumstances.
If applicable, determine whether another specialized candidate is being selected. -
Check directed inheritance.
The expected class hierarchy may not be the entire inheritance path. -
Compare the exact rule keys.
Rule name, Rule Type, Apply To class, Ruleset and other relevant attributes matter.
29. Common Inheritance Mistakes
More levels do not automatically mean better reuse.
This makes broad classes difficult to understand and maintain.
This defeats the purpose of inheritance.
Explicit relationships should be understandable to another architect.
Built-on application relationships and class hierarchy solve different problems.
Class hierarchy alone does not explain every rule-resolution outcome.
Rule resolution considers multiple inputs.
30. Inheritance Design Checklist for Alpha Bank
Before adding a new rule to the Nexus application, the architect should ask:
- Is this rule specific to one Case Type?
- Is this rule common to several Case Types?
- What is the highest class where the rule remains business-correct?
- Does an existing parent rule already solve the requirement?
- Can an existing rule be parameterized instead of duplicated?
- Is a new class level really necessary?
- Is directed inheritance required?
- Does the rule belong in the application framework instead?
- Is the Ruleset Stack correctly structured?
- Could this design make future rule resolution difficult to understand?
31. A Simple Mental Model for Pega Inheritance
When designing inheritance, remember these four questions:
What reusable application capabilities does Nexus build on?
What business class should this rule belong to?
Which ruleset and version should contain and expose the rule?
Given the runtime context, which rule should Pega actually execute?
32. How I Would Explain Alpha Bank's Inheritance Architecture in an Interview
Example interview answer:
"In our Alpha Bank Nexus application, we use inheritance to maximize rule reuse while keeping business-specific behavior at the appropriate level. Our Case Types use an Alpha-Banking-Work class hierarchy, while reusable Data and Integration capabilities are separated into their respective class structures.
Pega supports pattern inheritance and directed inheritance. Pattern inheritance follows the class hierarchy automatically, while directed inheritance explicitly specifies another parent class for rule reuse when required.
We also separate application inheritance from class inheritance. Nexus can build on reusable Alpha Banking or enterprise applications, while individual Case Types inherit through the class hierarchy.
At runtime, the Ruleset Stack and class hierarchy are inputs to rule resolution. Pega evaluates the applicable rule candidates and selects the appropriate rule based on the rule's keys, availability, inheritance path, Ruleset Stack, specialization, and other applicable factors.
So, for me, inheritance architecture is not just about parent and child classes. It is about deciding where reusable business behavior belongs and making sure the runtime rule-resolution path remains predictable and maintainable."
33. The Complete Alpha Bank Nexus Architecture
We can now connect everything we have designed in the Application Architecture series.
ALPHA BANK
│
▼
NEXUS
Banking Application
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
CASE TYPES DATA TYPES INTEGRATIONS
│ │ │
▼ ▼ ▼
Work Classes Data Classes Int Classes
│ │ │
└─────────────────────┼─────────────────────┘
│
▼
CLASS HIERARCHY
│
┌─────────┴─────────┐
│ │
▼ ▼
Pattern Inheritance Directed Inheritance
│ │
└─────────┬─────────┘
│
▼
RULESET STACK
│
▼
RULE RESOLUTION
│
▼
SELECTED RULE
│
▼
RUNTIME
This is the key architectural relationship:
34. Key Takeaways
- Inheritance is a core part of Pega architecture, not just a coding technique.
- Pattern inheritance follows the class hierarchy automatically.
- Directed inheritance explicitly specifies another class for rule reuse.
- Application inheritance and class inheritance solve different architectural problems.
- The Ruleset Stack is separate from the class hierarchy.
- Rule resolution considers multiple inputs, not inheritance alone.
- Put common rules at the highest level where they remain genuinely applicable.
- Keep specialized business behavior at the appropriate specialized level.
- Avoid unnecessary class depth and unnecessary duplication.
- A good inheritance architecture makes Nexus easier to extend, maintain, troubleshoot, and evolve.
The Big Idea
A mature Pega application does not solve every business requirement by creating another independent rule. It creates a meaningful architecture where rules are placed at the appropriate level, reused through inheritance, packaged through rulesets, and selected through rule resolution.
In Alpha Bank's Nexus application, inheritance is what allows us to build once, reuse where appropriate, specialize when necessary, and keep the overall application maintainable as the banking platform grows.
Pega Academy References
- Pega Academy — Rule reuse through inheritance
- Pega Academy — Rule resolution
- Pega Academy — Ruleset Stack
- Pega Academy — Classes and class hierarchy
- Pega Academy — Ruleset, class, and circumstance specialization
No comments:
Post a Comment