My initial views
For a long time, I have viewed the job of UI/UX designers as one that ensures a clean-looking product with the best experience possible. This is still true, but I have never thought about the depth of work required to get the best results.
A case in point
I found myself working on the API for a booking feature of an app, Most of my work was influenced by the mockups of the app, Unlike most bookings where you have pre-created slots for users to choose from, this was the kind where there are opening and closing times, which meant a user was allowed to pick times between the opening and closing times. This was represented on the mock-up as a simple time picker.
On the backend side of things, I just went ahead to create an endpoint that accepts bookings, cross-checking against existing bookings to prevent overlaps then persist. From the frontend standpoint, things were not exactly ok.
You see if the user is presented with all possible dates they might end up receiving error messages each time the date they pick overlaps till they finally picked a free time range, which is not the best experience. The next best solution was to populate the time picker with available time slots, the challenge here is we might just end up with a lot of time slots to scroll through.
The Ah Ah moment
This got me thinking, why is this not falling in place nicely, I mean as a developer the only time you seem to have to jump hoops is when you try to mock some natural world scenario, for example, calculating menstrual cycles, timezones, etc. There was something wrong.
It took a while but it hit me, This is not about implementation, it's design, This is not a problem for a time picker, this one is best solved with something like a display calendar. All booked times are spread and displayed on the calendar, this naturally reveals unbooked slots then the user can pick empty slots. Simple and clean.
Final thoughts and my new view
The one thing I kept thinking about after was if I were a UI/UX designer how would I get this right before it gets to the implementation stage? How do I learn these things? Sure for something like the above case, I would spend time learning about available inputs and when best to use them. But what about other aspects of UI/UX? UX/UI goes beyond color schemes and user flow, but also aspects like data flow and timeliness.
The commonest states/dataflows are empty states and data overflow (knowing when to paginate). What about that long list of available time slots? How long will it take a user to find the perfect time to pick or how long will it take for the user to get back a response about their booking?
Populating a design or mocking it with data reveals a lot of things that might be overlooked and caught only during implementation because well that's usually the only time you have test data going through the product. Imagine forgetting to add country codes to phone numbers at the design stage and only realizing you need to add this when you get to the point of implementing SMS.
As I keep thinking about it, It becomes clear to me that a better UI/UX considers the entire user journey of the app from development to growth. With considerations like happy, sad, failed, and successful paths along the way. Thinking through the colors and product flow alone is not enough. The work of the UI/UX designer brings the product to life through imagination before implementation. Again this is something I have never given deep thoughts to, maybe many already know this but, I never thought of it.
Here is another article you might like 😊 "Letter to an aspiring developer"