Improving the User Relationship XP System with 'Understanding' and 'Time Spent Together'
Improving the Existing User Relationship XP System with 'Understanding' and 'Time Spent Together'
We received feedback that the user-to-user relationship level XP system was too limited, leading to a subpar user experience. Specifically, the criteria for building relationships weren't clear, and there wasn't enough indication of how much relationships had progressed. So, we decided to improve this part.
Attempts and Pitfalls
Initially, we approached it simply: just increase the conversation count and the relationship level would go up. But it turned out to be more complex than we thought. Simply talking a lot doesn't necessarily lead to a deep relationship.
Root Cause
The existing system had a single, overly simplistic metric for measuring relationship depth. It was difficult to quantify the qualitative aspect of 'understanding,' and there were limitations in measuring the quantitative aspect of 'time spent together' solely by the number of conversations.
Solution
To solve this problem, we expanded the existing system to include two axes: 'Understanding (Ceiling)' and 'Time Spent Together (Days Conversed)'. 'Understanding' represents how well users know each other, while 'Time Spent Together' is based on the actual days of conversation.
Along with this, we also improved the XP visualization. This required modifications across the board, including the backend repository, profile components, related hooks, and the libraries in use.
// Example backend repository modification (relationship XP calculation logic) interface UserRelationship { userId: string; targetUserId: string; understandingScore: number; // 0-100 consecutiveChatDays: number; // Consecutive days of conversation xp: number; }function calculateRelationshipXP(relationship: UserRelationship): number { const understandingWeight = 0.6; const chatDaysWeight = 0.4;
const xpFromUnderstanding = relationship.understandingScore * understandingWeight; const xpFromChatDays = relationship.consecutiveChatDays * chatDaysWeight * 10; // Adjust daily weight
return xpFromUnderstanding + xpFromChatDays; }
// Example profile component modification (XP visualization) function UserProfile({ relationship }: { relationship: UserRelationship }) { const currentXP = calculateRelationshipXP(relationship); const level = determineLevelFromXP(currentXP); // Function to determine level from XP
return ( <div> <h2>{relationship.targetUserId}</h2> <p>Relationship Level: {level}</p> <p>Current XP: {currentXP.toFixed(2)}</p> <div className="xp-bar" style={{ width:${(currentXP % 100)}%}}></div> {/* Simple XP bar */} <p>Understanding Score: {relationship.understandingScore}</p> <p>Days Conversed: {relationship.consecutiveChatDays}</p> </div> ); }
By combining these two metrics and modifying them to be visually well-represented, user reactions have been much more positive.
Results
- Increased understanding of user-to-user relationships.
- Significantly improved visibility of the relationship level XP system.
- Overall user experience satisfaction has increased.
Summary — How to Avoid the Same Pitfalls
- [ ] Diversify the measurement criteria for the relationship level XP system (e.g., 'understanding', 'time spent together').
- [ ] Improve XP visualization methods so users can easily perceive their relationship progress.
- [ ] Plan modifications across backend logic, frontend components, related hooks, and libraries.