EXPERIMENTS

#043 It's Getting Pretty Cool
    Dupdate
by Cam, 02/22/23

Realization

Preface

This past week I had a huge wow moment: Dub is actually getting pretty cool. There were ~dozen critical features that all crossed the finish-line to miniminally viable nearly simultaneously and it was like a magical flip switched (s/o Anupam for a wild code push this past week). As soon as I implemented basic wallet management, I finally saw the crazy potential for Dub. This felt great, because we’ve honestly been running almost entirely on gut, hopes and dreams, and lots of “yeah that’d probably be cool“‘s. Just yesterday, I ran a build of Dub and thought “oh wow - that is pretty cool” - now it’s time to add some polish and validate/invalidate externally.

Feature Overview

Profiles

At the highest level, you can now seperate your Dub experience into isolated profiles. We’re still playing with how to balance interoperability between profiles (i.e. how would the same wallet look / feel in different profiles?) but regardless, a basic implementation is in Dub and is working.

Infinite wallets

Please ignore the color of the wallets. I spent a day deep diving on Color Theory / color generation and then ran out of time to implement what I learned. Right now, there’s the most basic random Color generator that sets the colors. Soon, the magical color Wizard that generates the Colors will only generator happy, beautiful (and readable) colors. Soon.

Alas, you can now generate infinite wallets in Dub. For now (/for testing), each profile starts with the same wallet that we’ve been using for testing purposes, and you can generate as many random wallets as you want in addition to the default wallet.

Right now, these are entirely randomly generated (and they disappear when you Quit the app). Soon, these will be generated using the HD Wallet standard (BIP 32/39/44) that I touched on a few weeks back (and they’ll also be persistent so they DO NOT disappear when you Quit the app).

Chain Switching (per tab!!!)

You can now change the Network that an individual tab is connected to. We’ve never seen such flexibility for using multiple chains simultaneously, so we’re quite excited about this.

Process

Primary Challenges

Too much too fast

Our codebase has ballooned in the past ~week. We now have more Swift than JavaScript (yay! previously it was ~20/80 Swift/JavaScript). Rapid experimentation favors messy, hacky, duct-tape code over organized, happy, efficient code. Going forwards, I hope to dedicate time on Wednesdays and during our Friday retrospectives to reviewing and improving my code and the codebase at large.

Learnings

We have several key unique design challenges that will make or break our product

Shoutout to Anupam for designing and iterating on a massively flexible backend so that we have the freedom to do literally anything on the frontend. A single wallet, wallet groups, a wallet per tab, changing networks per tab, profiles, etc. - there are so many things that we can do with the browser but even moreso the wallets / blockchains.

There was a moment where I felt quite overwhelmed by the infinite potential paths we could take - but after distilling things for a bit, Pavan and I started to document a set of core design challenges that we feel will make or break the blockchain browser.

Below are two that are top of mind for myself right now, though we’ll be merging and managing a more extensive list of the coming weeks. To answer these questions, we’ll start with a set of requirements+goals and produce+test as many iterations as we need until we find answers that are so clear we can’t ignore them.

Design Challenges

Multi-wallet

Each profile can have multiple wallets, some of which are hierarchically related (HD Wallets) - it can be hard to tell which wallet is doing what - how might we make it easy to select and understand which wallet you are using for a specific action?

Multi-chain

Each tab is an instance of a wallet - this brings a lot of power (open the same dApp side by side but connected to different chains, use the same wallet on different dApps but connected to different chains, etc.) but also a lot of baggage (each tab has an associated wallet, a current chain, notifications, etc.) - how might we display and enable interactions with each of these properties in a way that isn’t overwhelming?

Next Steps

DeArcIfication

Dub will not always look / behave so much like Arc. A fresh face / design system is critical before we begin pushing Dub externally, but it has constantly slid down the priority list (or at least been superceded by other items). This might not be a direct Next Step, but I wanted to note it so that y’all know the fact that it’s currently mostly a mirror image isn’t just a shameless copy but instead a placeholder :)

I am constantly being prodded to implement proper search (right now the search bar literally does nothing) - I think I’ll do this next, but it’s quite revealing to see just how important this feature is. Search has to be perfect. My first implementation will not be, and that’s ok. But it’ll be a start, and we’ll feel when it’s perfect through iteration.

Next 4 Weeks: Community / Design

Ok I’m actually gonna do this soon I promise. I’ve repeatedly ignored this in order to favor more tangible, clear tasks on the Dub development checklist. No more ignoring - my update next week will be 100% focused on this (though I will still contribute to Dub development daily, that’ll be my fallback as opposed to my default).