It’s been a long, long time since my colleague said that “if the business can’t give us better requirements, it’s their problem, I’ll just do what I think they had in mind”. But I get frustrated every day with systems that apparently were created using that approach.
I think the essential problem is that we, programmers/designers/makers, very often don’t have enough “business” knowledge around the system we’re building.
I’m not talking about having more user stories or adding more detail to them.
I’m talking about the fact that it’s impossible to build a great product if you don’t understand the business around it.
It’s not just hard. In the long run it’s simply impossible. Because sooner or later you’ll make something that will ruin your system, that’s inevitable. Maybe you’ll be lucky and not many people will be affected. But if you don’t have enough context, you’ll keep making bad decisions over and over and over again. Interestingly enough, you might not even realize you make any decisions, because you make assumptions without noticing.
After a while your only hope will be lock-in and competition that is even worse, but who wants that?
If you don’t know how your target audience thinks, what they value, what mindset they have, then how can you make sensible technical trade-offs? Is speed the priority? Or rather ease of use? Or accuracy? Or pleasant design? If you do know that, then do you actually keep that in mind when you develop every new feature or fix every bug?
If you don’t know what’s the relative importance of the specific qualities of the system you’re building, then how can you judge if the design you selected is optimal? What criteria do you use to dismiss alternative approaches? Do you even bother to come up with a few alternatives?
Last but not least, how often and for how long do you think about business consequences of technical decisions you make?
On the one hand we brag that technology is making the world a better place, on the other it seems we don’t fully realize how big impact it has on daily lives of many people when it doesn’t deliver on the promises it makes.
A few small examples from my personal experience as a user:
For a long time I looked for an app to learn German vocabulary. Finally, I found something that looked like what I wanted. The content was interesting, I had lessons to every video, it was self-paced and had revisions. I was thrilled and right after the trial I bought 1-year access… and soon afterwards I stopped using the app completely.
Turns out the “learning” part is very rigid and I have to work around it. The content is not ideal, so I have to learn words that I don’t even know in English after learning it for 10 years. That’s on a newbie level (sic!). I have to misuse the app to dismiss the words I’m not interested in learning, because apparently nobody thought that ability to customize what I learn would be useful. Then on some days suddenly I have (literally!) hunderds of words for revision, even though I didn’t fall behind the schedule.
Talk about demotivating and overwhelming.
So my idea was to keep using the content (as it is really interesting) and use another app with more sensible revision part for learning vocabulary (by manually entering vocabulary I want to learn). Great idea, but I thought about doing it 2 months ago and still haven’t even started. I’m scared of opening the app, because probably all my 1000+ words are due for revision.
As a language learner I want an app that doesn’t force me to learn useless vocabulary, doesn’t torture me with boring content and doesn’t push me to work at a too fast pace, so that I don’t end up abandoning it and feeling miserable about not learning anything (again!).
Another example is generating invoices from the freelancing portal. For whatever reason (maybe local law?) the invoices are generated on a weekly basis, but the Polish tax authority requires accounting everything on a monthly basis.
Of course, I can manually reverse-engineer all the costs, all the data is there, no problem. Only it takes time and costs extra money for the accounting services, not to mention the “fun” of doing currency conversions and corrections 5 times more times than necessary every month (as I have to make that conversion for every invoice I submit, plus correct when I transfer money to my account). On top of that, I can’t be sure how the tax inspector will judge my creativity when they analyze my documents.
As a freelancer I don’t want to spend hours manually crafting reports that could easily be generated automatically (or semi-automatically) from the data you already give me, in a format that my tax authority demands, so that I can sleep well and not look for the first opportunity to stop using your portal as soon as a better opportunity arises.
Of course, those are just two tiny examples, there are many, many, many more. Once you start noticing such issues, it’s impossible to unsee them. And it’s all too easy to put myself in the shoes of the people that created those features and wonder if I’d even think about scenarios that now drive me nuts.
It’s not about the need for better user stories or being a more responsible programmer.
It’s realizing that nowadays many businesses are shaped by technology. For better or worse.
It’s about considering our work not only in the nice, sterile, non-existing box of technical requirements, but also in the context of how it impacts business and users. It’s about considering the business impact of decisions disguised as purely technical.
Because it might be more efficient to generate reports on a weekly basis and your task might be to optimize DB performance, but tax law specialists might tell you that’s problematic in some countries. If you ask them.
Because the acurracy of the vocabulary revision algorithm may be ideal and that might be one of your app’s selling points, but the expert teacher might tell you that encouraging regularity and persistence is more important than precision. If you ask them.
At the end of the day, it all comes down to asking constantly How this technical decision will impact business and users? Who should decide if that impact is OK?
I know that many people think PM/BA/everybody-but-them should worry about such things. In my experience assinging such responsibility to a specific person or group is only useful when you look for somebody to blame for yet another disaster. If the “makers” don’t think about it, then they’ll make a lot of decisions that weren’t really their to make.
For better or worse.