User Empathetic Software Development

I learned to care about user problems. Maybe I learned it the hard way. Was there an obstacle along the way? No. None. Well, except me. I was so stubbornly affected by the technologies we used that I easily got into conflict with other devs that were trying to squeeze in "stupid" technical solutions. I used to be one of the first to ask the questions of proper architecture, design and any deviants from the already agreed contracts. Anything that would bring the same old topics for discussion all over again, I rejected firmly. I became passive aggressive and pushed back the improvement proposals, as long as they were not aligned with our what-not technical stack and what-ever coding practices. I read Uncle Bob for dinner, I prayed to Martin Fowler every morning.

When my transformation happened, I started not to care about any of that. Still, this was not an easy process as I had to confront myself and my stubbornness with all the bullshit my attitude created. I had to beat that attitude with a stick. With a knife more precisely. I had to bury it and let only those that noticed it know about it. The rest was like a feeling of a recovering addict going back to their wild years. Now all of it looks damn foreign as I adopted a process that one of my friends calls 'user empathetic software development'.

I really like that notion. Having an empathy for those whose problems you solve. It's not just a technical point of view, or a professional practice. It thought me to change my life views and see it from the other side, the distressed one. The one from which you get a harsh feedback. I learned not to roll my eyes on each negative comment I get but rather, ask where that comes from. And to be honest, it's nothing scary. It just takes 3-4 years to get there, but what's that compared to a lifetime? 🌹

That insight revealed way too many missed opportunities to do something that could positively affect the user. Endless technical discussions, endless flamewars, competitiveness to toxic levels, revenges, back-stabbing and all the dirt the ugly side of software development profession brings. It was painful to see that happening amongst some of the dearest people I worked with. Clever by brain, dumb in mind. Sometimes it felt like working with robots. And the funny thing was that I used to be exactly like that.

My realization was not a moment of epiphany or heavenly light that descended upon me one night as I was going back at home. It was a lot of read books, lots of conversations with smart people, and introspections. I defined that purpose as being there to solve a real life problem a user has. Not just any problem, but problems affecting their sick parents, their bank accounts, insurances or the processes that support the running of their businesses. All of them frustrating, had they been a bad experience.

Few years ago I was working as part of a team that was building a shopping list mobile application. I learned a lot there. At some point the executive management decided that instead of going after non-organically acquired users (that obviously cost a lot), to buy an already established product for few millions of bucks. Smart or stupid, who am I to judge, but that decision brought the product, the whole team and few high level management positions go to oblivion. A year after that decision, none of what I used to work at existed.

We used to do a lot of experiments with that app. We'd release a broken version and right after a new one, fixed version. We were too much focused on the technical aspects of the process rather than the experience of the users whose problems we were solving. One time, a person reached out to us and said something like: "Hey, I have a sick mother that lives alone. She cannot do her groceries herself so I do it for her. For that, I use your app as my list of products I have to buy. But after the last update, all of my data is gone. And she's been working on that shopping list for quite some time. Can you do something about it?"

That hit me hard. I reflected on that problem. We knew we couldn't do anything about it because we were too busy refactoring the already broken but functioning code and spending endless times of discussions how to or not do it. Eventually, we erased all data for this user. Few cared.

A bit later that year we received another similar support request from a chef from some restaurant in god-knows what place in the world: "Hey, I am a professional chef and I use your app the past 5 years. I cannot find any of my data after I last synced my lists". Again, he was screwed and nobody could do anything. I can imagine he went with something as simple as Google Keep right after. Who wouldn't?

The next year the product and the team were discontinued.

Next I was working with one of the strongest team I have ever worked with. It was so valuable that I have the feeling many of us thought that honeymoon period will never end. We had great leads, challenging structure (as the company grew a lot) and lots of things that we learned from each other. Everything was in place except one: user's empathy.

Developers were strongly focused on winning positions and overtaking other developers that they forgot what our mission was. Well, maybe nobody even knew that but, seeing it from this perspective, we were too strong in our opinions and too soft for some of the crap we were told to do. It felt as if it's always more important to decide if the entity was to be mapped in the data or the business layer rather than what we do with that data and how does it impact the user. At some point things became so politically toxic that seemed like we all forgot what we were after.

At that period I used to own one very interesting feature. I didn't have a team, but I was soon to be promoted by some spreadsheet and slides-driven process to a higher-seniority position (never mind the title). In the middle of that craziness and right before the pandemic kicked, a young junior gentlemen joined my team to help me build and maintain our feature. I used to mock the development for him, he used to do the work. He was asking a lot, we were both learning even more. I remember, one day, we went to our product manager to ask them about a particular feature request. The manager gave us generic answer. We thanked and left. I said "let's have a coffee" to him and went to the kitchen. I instructed him to do the opposite of what our manager said. "Why? That is not that she said..." he was confused. I said "because what she proposed is a terrible idea for the user". Great for us, as it lowered the complexity of development, mitigated the risks and did not promote conflicts. But we decided not to listen. We did the opposite. I remember, that week, the dude pinged me few times on Whatsapp (which is not the normally accepted communication channel for professional discussions —just to emphasise on the confusion that decision brought), and asked for many more times for approval. I said: "Do it, nobody will know". This was a product of millions of customers by the way. Millions. We did it as I suggested. The feature was released soon after. Nobody, to this day knows it's different than it was specified or what the other platforms had. We did it for the better of the user. Users were satisfied, there were no tears. Is it team work? No, but it was a decision solely based on the empathy for the user.

6 months after that my manager called me to announce my promotion. I was grateful, I am even today, but honestly, other than the title change (back then not even the salary changed), it didn't make ANY difference. The next day I called him and announced my resignation. It was an anxious decision, but it had to be done. Overall, the lack of empathy for the problems that we were solving was too strong of an obstsacle for me to overcome, mixed with the politics that hit hard on all levels. Soon after, about 15 more developers from the same team left the company.

I continued to be a user of the product that we were building. It's really a nice one. One of the changes I noticed in the feature I owned, after I left made me think: "I would have never allowed for this to be released". I'd challenge it, I'd escalate it. But never agree to the illogicality that was pushed. And that is because I learned to be a user-empathy driven software developer. Because I stopped emphasising technical trivialities and started caring about the solutions that the users were proposed.

As I was working on my next role, my daughter got sick for 2 days and then I got sick for 1 more day. Shit parents do. I had to be absent for 3 days. My manager called me and said: "Look, things don't look good, you were moving, your kids might be more often sick..". Being out of ideas I said: "maybe a little empathy would help at this point?", to which he answered: "Don't expect empathy from me, I have a medical condition, I cannot feel empathy". We hang up. 3 months later, I left that company. Fast forward, 2 weeks ago, I received a message from a dear colleague of mine from that company that said: "I had a very awkward conversation with one of the cofounders, and I knew what to do. I left the company, nothing was easier. Glad you left much earlier".

That didn't only take me a year ago in my head and the chaos I was part of. But made me think very vividly: no empathy - no product.

I firmly believe that.