My initial views
For long I have viewed the job of UI/UX designers as one that ensures a clean looking product with the best experience as 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 of a booking feature for an app, Most of my work was influenced by the mockups of the app, Unlike most bookings were 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 any starting to closing time between the opening and closing times. This was represented on the mock-up as a simple time picker. For me, I just went ahead to create an endpoint to accept bookings, cross-checking to prevent overlaps then persist. From the frontend standpoint, things were not exactly ok. You see if the user is allowed to select their prefered times they might end up receiving error messages each time there are 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, you know like calculating menstrual cycles, timezones etc. There was something wrong. It took a while but it hit me, This is not about implementation its design, This is not a problem for a time picker, this is one that 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? The only way to know the best option to go with sometimes depends on thinking not only through the colour scheme, the user flow but also aspects like data flow and timeliness. The commonest form of data flow thought of are empty states and overflow of data(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 till the server returns the entire time list on picking a date and how can entire process of returning a list be avoided ? Populating a design or mock 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 realising 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 a better UI/UX is one that considers the entire life of the app from development to growth. With considerations like happy, sad, failed, successful paths along the way. Thinking through the colours and product flow alone is not enough. The work of the UI/UX designer is one that brings the product to life through imaginations prior to implementation. Again this is something I have never given deep thoughts, maybe many already know this but me, I never thought of it.