Problems I like
If any of this resonates with you, you might also enjoy perusing my list of product and tool ideas.
Intersection of design and engineering
Over the course of my career, I’ve spent times in both design and engineering, sometimes holding both roles. I like thinking about the information design and really taking the time to understand the user’s goals. I’ve found that thinking through the design with a technical background helps me make decisions that result in more elegant code. Similarly, I’ve found that understanding design as an engineer helps me better inform design decisions with an understanding of what is technically possible. Code and design decisions are deeply intertwined, as all strong designers and engineers that I’ve met understand. In my experience, it is not possible to build great software for complex tasks without strong design and engineering collaboration. “Handoffs” between design and engineering might work for a simple website (honestly they don’t even work that well here, but you can probably get away with it), but they don’t work for the kind of software I like to design and build.
Complex tasks
When I say “complex task”, I mean things like:
- on-call engineer gets woken up at 3am and needs to quickly understand the root cause of a software problem
- a fighter jet pilot needs to be able to quickly understand where other planes are in the sky and what airspace they are flying into (among many other things)
- a backcountry guide needs to plan a route for an expedition in the mountains, taking into consideration weather, snow, technical difficulty, slope angle, and many other variables
- a city planner needs to plan a new bus route, taking into consideration existing routes, how many people the route serves within a half mile radius, walkability of the streets to the new bus stop, where people in this area need to commute to, and many other variables
I love designing for complex tasks because, to do it right, I need to really spend time understanding the user’s goals, how they solve this problem today, and how a new or better software solution can really make their life easier. I also need to understand what is technically possible and prototype different solutions to the problem. I suppose everything I just wrote applies to most software, but for particularly complex problems, there is no perfect existing solution I can copy or modify - I have to design something really purpose-built to the problem at hand. My favorite kinds of software design problems involve lots of data and lots of interactivity, and they require deep familiarity with the problem domain.
Data-rich interactions
Building on what I wrote above, I find myself drawn to working on products that involve lots of data, often real-time data that changes every few seconds, and data visualization. There’s a reason I spent so many years working in observability!
Multi-goal software
I think there is a better term than “multi-goal”, but I can’t seem to remember it. By “multi-goal” I mean software that isn’t constrained to a concrete series of tasks. Rather, you have lots of tools at your disposal to solve a variety of problems. This tension between the shear amount of functionality in such a tool and making common actions simple is super interesting to me. Observability products like the ones I’ve worked on are good examples of this, as are design tools like Figma and productivity tools like Notion.
High functioning people systems
I’ve also found myself really drawn to build high-functioning teams. I’ve had excellent managers who smooth the path ahead, resolving conflicts on the team, ensuring the team is well-staffed, and share difficult news honestly and as transparently as possible. I’ve also had neutral managers that don’t detract but also don’t add much to a team. And of course I’ve also had bad managers who seem to make every situation worse.
This interest has led me to taking on managerial roles, both in design and engineering. While I don’t find management to be my highest calling, I enjoy making teams and organizations hum, whether that is dialing in hiring processes, figuring out the tricky balance of giving teams autonomy while ensuring they stay aligned with leadership, taking the time to make a key hire, letting someone go who is dragging a team down, or mentoring a high-potential person.