This post was originally published in my personal site.
It's a common thought and a widespread idea that the only thing that matters is the user experience. If a certain product is well designed, the user will have a good experience and be able to accomplish his/her goal. And that's all that matters.
Following this line of thought, the user doesn't care about how the website was coded or what your technology choices were. She doesn't care if you have a great readme or comment your code. She doesn't care if you apply good design patterns or if you write good integration tests for your application. She doesn't even know (or want to know) all this stuff. If she has a great experience using your product, that's enough.
I totally agree that the user experience is what matters the most. We build great products to save people's time, money or improve their lives in some other way. But I think that we cannot speak about user experience without taking into consideration the way we write your code and our technology choices. These things have indirect, but huge implications in your user experiences.
You're a front-end developer working for a certain company. As every good team does, you're consistently trying to find out what your users struggle with when using your product, so you can improve it and provide a better experience.
Let's say that using Hotjar, you find out that your users are struggling with some filters. The way some of them are grouped is confusing, and the users are struggling to find the ones they need.
You're asked to fixed this and your PM asks you how much time you think you'll need.
If your application is well written, documented, uses solid design patterns, latest technologies that simplify your code, has good integration tests for that filters functionality, deployment is very simple, etc., it will most probably be an easy task. Let's say you can fix it in 2 days.
But, on the other hand, if your application code is a mess, uses old technology that only a one person of the team understands, has files with over a thousand lines, has no tests, the deployment process is horrible and often fails, etc., it will be a lot more complicated. You will struggle to make it work, and you most probably will introduce new bugs.
In this scenario, 2 days will not be enough, and you will probably need a week or more to finish this task.
Indirectly, yes, of course! She's struggling with your product's filters. She expects to find the filters she needs easily, but she doesn't. And she doesn't accomplish her goal of finding what she needs.
She's having a bad experience, and she wants this to be fixed immediately. Maybe she even took the time to write and email and complain about this. And what will you answer? "Sorry, but this will take over a week because our code is horrible"?
If you and your team had done things correctly, this issue would be solved in two days, and would be a minor issue. But because your code is a mess, you need a lot more time and resources and you have the risk of losing a lot of users who are struggling with this same thing.
No! Of course not. We should stop discussing these things that have little impact and ultimately are a matter of preference (and a waste of time). Both React and Vue (and other JS frameworks) are great and you can accomplish what you need with any of them. Using semicolons is the exact same thing as not using them. Using tabs over spaces doesn't produce any real impact.
Instead, we should focus on discussing things that have real impact. We should try to include latest technology that really makes our lives as developers easier and simplifies our code. We should use solid design patterns. We should document our code. We should write good integration tests for common user cases. We should have a simple and predictable deployment process that allows us to hit production with new features regularly.
These (and a lot more) are the things that matter and produce real impact. And ultimately, the things that indirectly matter to your users. Because if you do a good work, you will deliver what your users really need much faster. And that means providing a great experience, which is the most important thing.
If I may, my advice for you is that next time that you're discussing something technical or trying to choose a new technology for your project, think first about your users. Think about what's best for them. Think if this decision will really help you to give them what they need in an easier, faster way. Think if it will really make your life as a developer easier the next time users needs something fixed or a new feature.
Thanks for reading ❤️