Gozova

Front-end development

Jun 2021 – Aug 2021

My role at Gozova, in a collaborative effort with the designer, involved developing, enhancing, and implementing some UI/UX solutions. I developed one React Native screen to track and rate delivery driver performance. I constructed an entire storage website to reduce burdens on the storage sales team. I enhanced the current website implementation to match more closely with Gozova’s new brand. Next, I developed a blog website to increase our SEO ratings. I lastly designed and implemented a UX solution to enhance opportunities in the checkout experience. The main goal was to both provide the marketing team data and enable a safer checkout experience.

Gozova home page with huge Store Anything Simply title. Contains carousel of pictures showing Gozova drivers and users

Technologies Used

  • React
  • Gatsby
  • Bootstrap
  • React Native
  • Expo

Challenges

Gozova’s codebase had been operating for years with some tech debt. The front end is loosely documented, but is based on Bootstrap, Gatsby, and React depending on service. Since Gozova needed to scale its front-end some more with new UX focus, refactoring and mitigating tech debt would be key.

Approach

My approach to refactoring was to chunk and break up components to further be composable and re-usable. Then, I would do the same for the CSS styling.

This came with some hiccups. Bootstrap and older CSS styles would collide with each other in specificity and cascade. Also, some components were built for single use, but now need to be scaled to be reusable. This makes refactoring about understanding pain points first.

I decided to focus on refactoring while ensuring there were no visible changes. I would reimplement styles and components. When I can guarantee that my changes wouldn’t break existing code, I would build and extend features regularly.

One problem I didn’t expect was working with older dependencies. Since front-end tech moves quickly, documentation and resources for older versions would be buried. As I implemented more changes and features to the codebase, the first approach I found wouldn’t be sufficient. I had to measure them under a criteria and ensure it would be compatible with the codebase.

I experimented and tried to update the dependencies. It was a mistake. Everything broke. I learned that updating software dependencies isn’t the same as updating software as an end user. Dependencies and versions matter deeply. I learned about the significance of semantic versioning and why updating major versions is closer to a migration than update. I realized that it’s fine keeping things older versions as long as the code works, delivers value, and is stable.

After keeping these concerns in mind and refactoring the codebase, implementing front end features were straightforward. I translated UX design into implementation.

Reflection

It was my first time working with an established codebase and team at Gozova. Not only did I have to implement new features, but I had to ensure that my personal coding beliefs and styles melded with the team. There were times where I wondered why we didn’t use the latest and “greatest” new technologies. I learned the importance of stability and focus. New technologies don’t always translate to better productivity. There were costs in adopting new things just because. I realized that tempering an existing codebase and building features with what I had on hand turned out to be extremely productive. I learned that working in an established codebase meant having consideration for others. I enjoyed not only writing new features, but also bettering the quality of the codebase for the team.

Entire Gozova desktop home page introducing Gozova services, reviews, and instructions to get started Gozova desktop storage page introducing Gozova storage services and benefits Gozova mobile storage page introducing Gozova storage services and benefits Gozova mobile home page introducing Gozova services, reviews, and instructions to get started