2023 W5: Spreadsheet Grids and.. friendly business
Every week I post about one thing that happened at Rows. We're building in public!
We are in the middle of upgrading our spreadsheet, and the first of 5 announcements is out. Because of this large upgrade, this past week our team spent some time testing our Grid. Spreadsheets tables look simple, but there's *a lot* to know about the grids that power them, and so I'd love to share a bit of how we discuss Grids!
This post is almost like a double issue, because on top of 1 major thing there was also a smaller thing that I will briefly mention. This second topic was a surprise message by a user late Friday.
If there's one thing every spreadsheet has, is a grid. Wether they're small tables or gigantic spreads, The Grid is the fundamental building block for models, calculators, tabular data, logs and more.
So, what's in a grid? In our multi-year journey, we have gotten to know them inside and out, and we produced a map for talking about Grid challenges. If you're considering developing a project that is close to a spreadsheet or will have lots of tables, read on and beware! It's not for the faint of heart!!
Here's the issue tree that I use to review changes related to our Grid.
Grid dimensions and structure
How many rows and cols do you want to support?
What's the width and height of each column/row?
How do you show rulers? Are they always visible? Where do you display controls for selecting and re-ordering?
What are the styles of the grid? Can you color cells, hide grid lines? What else?
How does the size of columns and rows respond to changing sizes of cell content? Is it automatic? What is the default?
What kinds of content will you have inside the cells? Text, numbers, links, html, markdown? Do you support images? Files? Data structures?
What are the styles that cell contents will have? Can you bold Text, pick a font, can you align text horizontally and vertically, can you color it? How does text wrapping work?
Will you support cell tooltips for status information and cell helpers for quick actions?
Is there data verification for cells, and do you enforce it (e.g. must be number)?
Do you need to support formulas? Will formulas be cell-based, column-based, or both? How will you handle loading states while computation is working? Note: all of this dependes on how powerful the formulas are, which is not strictly a table topic; but computations influence the development of tables, for example if you want to allow computations to have side-effects and automations.
Filter and Sort
Do you allow filtering and sorting data in the grid? What conditions are available?
Is filtering shared between users or is it per user? Is it persisted or per session?
Is sorting permanent? Can you sort based on particular columns?
Do filters and sorts auto-update when there's new data or changes in the data in the table?
Do filters and sorts apply to the table as a whole, or do they work within sections of the grid too?
Is your table WYSIWYG (what you see is what you get), that is, you edit and share exactly the same thing? Do you hide part of it?
How do you add, remove and move new rows and columns?
Do you have freeze panes, and how do they work?
Do you select cells (spreadsheets) or content (text inside the cell, like an HTML page)? Can you make multiple selections?
Can you cut and copy-paste cells inside and outside your application? How will you handle multi-media and other types of data when copy-pasting and the data that is on the clipboard?
Does scrolling work in a pixel-based fashion, or row/col fashion? (per pixel or per row/col)?
Do pages with multiple objects behave like a canvas (like Figma or Miro) or like individual objects (like Notion)? That is, on a page context, do you have a global vertical scroll, or one scroll per element (kind of like an iframe)? What about for horizontal scrolls?
Does scroll happen one direction at time (vertical or horizontal) or does it work simultaneously (that is, diagonal scrolls work)?
Should you keep the scrolling speed equal for both directions, or should you do smart scrolling?
Do table titles and grid rulers float above the table, or not?
Do you use inertial scrolling and allow rubber-banding of scroll movements, like modern Operating Systems do, or not?
How should a grid render on mobile? Is it a WYSIWYG with the desktop version, do you scale everything down or let the browser handle it?
Should row and column size be responsive on mobile?
Should freeze panes work on mobile? How should they work in the context of a constrained space?
What is the architecture for your grid component? What technologies will you use?
How do you sync data to the grid, is it streamed? How do you optimize the loading data for the effective viewable space?
How will you handle interactions with the grid?
As you have noticed, the list is long, and I have really just focused on the most interesting problems that require team decisions.
If your needs for tables and grids is simple, you should stick to HTML and standard components. But as your need expands to millions of data points, and a custom application, you probably need to go custom!
One more thing.
Late on Friday I received a WhatsApp audio message from a user who runs a marketing agency. He's found a bunch of nice use cases for Rows, and was sending me an update: one of their client organizations is fully converted, another one is half-way through, and there's 2 more leads he's working on who might have a fit.
We are not directly connected to this agency, we don't have a revenue share model or anything; we're also not a huge part of their business and the reverse is also true.
He just did an excellent job on keeping us updated and excited. This is infrequent but not unique.
In the middle of the COVID pandemic, one of our investors flew in to Porto to have a lunch with me and do a regular status check. We had no urgent decisions or fires that had to be put out. He could have called or texted (as he also does). But he took the time to come over and see how we were doing.
This is how you motivate people. This is how we should all operate our businesses.
See you next week!