User-centric feature design

User-centric feature design

May 26, 2024
An image of a happy user interacting with a mobile app

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.