User-centric feature design

Early in my career, I did regular client demos and feedback sessions, and the features that worked best were always the ones designed around the people using them. At larger companies, users are further away and engineers spend more time on implementation, but I’ve tried to keep the same user-first habit.
Here’s the framework I use when planning new features:
- Identify the problem
- Define User Stories
- Map the User Journey
- Design the Solution
- Gather Feedback and Iterate
graph LR
A[Identify the Problem] --> B[Define User Stories]
B --> C[Map the User Journey]
C --> D[Design the Solution]
D --> E[Gather Feedback and Iterate]
E --> A
Identify the problem
Start by clearly defining the problem. Ask:
- What problem are we solving?
- Who is experiencing this problem?
- How does this impact the user’s workflow?
Define User Stories
Capture the user’s perspective with stories following this format:
“As a [type of user], I want [some goal] so that [some reason].”
Example:
“As a new user, I want to sign up with my email address so that I can access the platform.”
Map the User Journey
Visualize the steps users take to accomplish their goal. Include:
- Stages: Key phases to complete the goal
- Actions: Specific steps at each stage
- Emotions: How users feel during the journey
- Pain Points: Challenges or frustrations encountered
- Opportunities: Potential improvements
Design the Solution
As a backend engineer, I focus on:
User Interaction: Understanding frontend needs helps me design efficient APIs. For example, if users need to save form progress, the backend must support this.
API Design: I aim for simplicity and consistency, usually REST APIs organized around resources (users, orders, and so on).
Data Model: Get the schema, relationships, and constraints right so the data stays consistent, and design for the volume you expect.
Security: Give each part of the system only the access it needs, store as little personal data as possible, and think through who is allowed to see what.
Scalability: Plan for growth: caching, efficient queries, and services that don’t depend too tightly on each other.
Gather Feedback and Iterate
Collect feedback through usability testing, surveys, analytics, and user interviews. Involve users early and look for patterns in feedback. One user’s opinion may not represent the majority. If improvement is needed, return to the design phase and repeat until the solution resonates with users.
Building a Platform, Not Just a Product
Design features that serve many users rather than one client’s specific request. Clients will ask for custom things, and sometimes you should build them, but a solid general platform with custom pieces on top ages much better than a pile of one-off features you later try to turn into a platform.
Conclusion
There are always trade-offs between what users need, what the business wants, and what is technically feasible. Keeping the user at the center of the process, and asking for feedback early and often, is the best way I know to make sure we’re building the right thing for the right people.