I spend a lot of my time solving problems and some of it translating those solutions into code. If you are reading this, there is a chance that you also do this from time to time.
We came a long way in this problem solving business: today more and more problems are being solved with some form of programming.
This was due in large part to the whole sharing nature of developers.
If I solved this problem, why should you bother solving it again?
The whole Object Oriented Paradigm was more or less made so we could generalize solutions to our problems and greatly excel at writing better and more reusable code.
But is this really the case?
Unfortunately there has been numerous times that I “wasted” my time implementing someone else’s “solution” instead of writing my own. But this should NOT be the case.
Because we are living in a world where the software development side of things has to be done as fast as possible, I think that it is really important for us to share as much code as possible. But the thing is that when we share our code, we rarely think of the person who will implement it, and when we do, we tend to think of that person as another Developer, which shouldn’t be the case.
The first requirement for an exemplary user experience is to meet the exact needs of the customer, without fuss or bother. Next comes simplicity and elegance that produce products that are a joy to own, a joy to use.
Lets go over the first part: The first requirement for an exemplary user experience is to meet the exact needs of the customer, without fuss or bother.
When we are using any kind of product, be it a software or a hardware one, we hate when something isn’t just as it should be. It’s one of those feelings that everyone explains differently, but we all know. We usually say that the thing that we are using should just be: logical.
But than when we look at code, for some bizarre reason, we are totally okay with steep learning curves. For some libraries this is indeed needed, but for the majority of them it is not.
Next comes simplicity and elegance that produce products that are a joy to own, a joy to use.
This is how people describe iPhones for example, or any other carefully thought out product. It’s when you are using something and it just makes sense and you feel good when you are using it.
For me, that is the Twitter API or Carbon for PHP or IQKeyboardManager for iOS or the Stripe API or anything Google makes. These are some of the libraries/APIs that I genuinely enjoy implementing and utilizing. They get the job done, they are self explanatory and carefully thought out.
What I’m trying to get to is that a lot of libraries and code have unneeded noise, unneeded complexity, that makes it really hard to really see what you are trying to get done in the first place.
My point is that we should talk and discuss more about clean code, refactoring, good design. We should talk more about Developer UX because developers are users too.
P.S. Every week I will post something I think is really useful to write good, understandable and easy to use code.