This is the primary team I’ve worked on for the past 2 years. I’ve helped build much of the core functionality. Most of my contributions here are UI related. I’m currently the iOS lead on all things sports betting and gaming.

Yahoo Fantasy Slate

This was our initial foray into Sports Betting. I worked with the gaming and design team to completely overhaul this experience on mobile. Additionally, I helped add video contests to provide an experience similar to HQ Trivia. Primarily used for marketing, we created simple, multiple choice contests around sports games that are free to enter and allowed sports fans to win some serious money. (One person ended up winning a million dollars!)

Slate Circle (see red and green pie-like UI element in the screenshots above)

This was a small, but fun technical challenge. Because a contest and it’s questions are dynamic in nature - that is - can have different states (unanswered, correct, incorrect) and number of questions, we needed to dynamically build an asset to represent those parameters. This involved dropping down to draw UI in `drawRect` using UIBezierPath. I got to relearn high school geometry around everything circles and arcs. This also required me learning and taking into account the core graphics coordinate system.

Scrolling Performance

In many places throughout our app, we don’t have a typical approach to rendering collections of data - or scrolling lists. What we end up doing is having the entire list in memory at once; a UITableView inside a UIStackView. This has it’s pros and cons, of course. The pro is that everything is rendered only once up front and the scrolling is buttery smooth. The con is that this approach isn’t scalable - you will inevitably run out of memory with a dynamic and growing list. Why couldn’t we achieve both smooth, 60fps scrolling while handling as much content as the backend gives us? 

Whenever we would fetch new data, we completely discard the old data in favor of the new. That approach is very inefficient as we only need to re-render the data that changed. That led me to creating a method of diffing existing vs new data and only re-rendering when we needed to. During a hackathon, I was able to implement this with help from a diffing library called DeepDiff.

Design System

Upon joining the team, I worked with design, android, and web teams to create a design system. Before the implementation, this app had lots of inconsistencies. Because this app has been out since 2009, there were many bugs never addressed in regards to spacing, fonts, and colors. As a result, the underlying code architecture was also a bit of a mess. We were afforded time to do a redesign and fix many of these issues.

I created all of the buttons you see in the app - there’s a slight haptic feedback and animation when pressing a button.
I added native support for light and dark themes.
I implemented dynamic text resizing to make the app comply with accessibility standards.

Next
Next

Flickr