A few years ago, I set out to build a small Excel plugin to help out my girlfriend at the time. I ended up building a full-blown IDE over the course of four years and spent the winter in Poland in a startup accelerator.
How did this happen? As with many great endeavors of man, this one also started in order to impress a girl.
Back in 2014, my girlfriend, let’s call her Anna, was having a hard time dealing with data in Excel files. Anna worked in quality control in a large pharma company. Every month or two, she’d start bringing home this soul-crushing pile of Excel files to work on, often over evenings and weekends. I wasn’t too happy about this since I had other plans for our evenings and weekends, but it did give me a chance to show off my superior tech skills so I wasn’t too sad about it. You might be surprised to learn that in a developer’s life, there aren’t all that many chances to impress girls with your coding skills.
Anyway, I took a look at the Excel files she was bringing home and they were basically huge tables of data exported from various systems. She had to alchemy this data into several reports and the way to do it was to carefully follow the several dozen manual steps that were laid out in an arcane word document prepared by God-only-knows-who some years before. I looked at it carefully, and it turned out that what she needed to do would have been a few 10-line queries in SQL. In Excel, though, it was several days worth of vlookup-index-match-temporarycolumn-pivottable-copypaste-HELL. My first thought was importing the data into a database, processing it there and exporting it back. But this task was something she needed to do often and she didn’t have any database experience so this wasn’t an option.
So anyway, I had built some plugins for Excel before, and I figured I could probably build something that would automate at least a part of her task, after which I would be seen and admired by her as the hero that I was. The first thing I wanted to implement was joining tables. So, I rolled up my sleeves and eagerly set out to reinvent the wheel. It took about an hour for me to realize that there already existed these mysterious softwares that have the ability to join tables of data. The idea struck me like a lightning bolt: I could put a small database engine (SQLite) into my plugin, load Excel data into it and query the crap out of it six ways from Sunday. In the UI of my plugin, I’d give the handsome user (myself) a textbox for writing the queries and a grid for displaying results. This was going to be great!
It took a few days to build the first version. It was butt-ugly and looked like it was designed according to whatever the opposite to Feng Shui is, but it worked nicely. I could load data from Excel with the click of a button, type my SQL query into the textbox and run it by pressing “Button2”. Once the plugin was ready, I sat down with a somewhat skeptical Anna and we prepared the queries for her use cases. I was seriously looking forward to the next time Anna would bring home the pile of Excel files. And bring them she did. And work spectacularly it did! Not to brag, but instead of several days, we were done with her reports in about an hour! There was still some manual copy-paste work to do (hence the hour), but the bulk of the work was done by the queries and SQLite.
“I had done it”… I remember thinking… “I had stared the into the eyes of the Gods of the spreadsheet underworld, and the bastards flinched!”. Anna was impressed (ever so slightly and not nearly enough). Not only did I win Anna’s underwhelming admiration, but this was a general purpose solution that I could sell to other people! It was obvious there was only one way this could go, and only one question to answer: what color mansion would I like?
So I posted about my plugin on Reddit/r/excel. The response was very enthusiastic, people loved it! Close to 100 upvote’s worth of love. Encouraged, I continued working on it much to Anna’s annoyance, because now, instead of her spending time in Excel, I was. At one point she got so annoyed that she gave me an ultimatum: either her or the project.
Anyway, the Reddit reception was encouraging but for some strange reason, I did not have thousands of people beating a path to my door to buy some licenses the next morning. It was quite obvious that there was something wrong with all these people who weren’t lining up to buy. After all, my ex-girlfriend Anna saves several days each month with it, and she can’t be the only one who could make good use of it. Perhaps the problem is auto-complete. Any serious tool needs autocomplete these days…
What was I to do, my turquoise mansion was waiting for me just one auto-complete feature away. So, I dusted off my compiler theory books from college, picked up Antlr and built a parser for SQLite (with the help of a SQLite grammar I found on GitHub). This was my favorite feature to build. With the parser in place, one by one I added all the cool features: auto-complete, error highlighting, symbol tooltips, bracket-matching, code formatting, function insights and star expansion. Then I added the ability to use external databases instead of SQLite, which made it possible to process Excel data with an external database but also to easily move data between Excel and databases. This was great: posts on Reddit, posts on HackerNews, money rolling in, licenses being bought. Still, it was only a few hundred – maybe up to a few thousand dollars per month. Careful calculations conclusively showed it wasn’t enough for a mansion.
But, it was fun, and my corporate job wasn’t. I decided to quit and devote my time to a worthy project: my Excel plugin. Being a techy person, I wasn’t very keen to do any marketing and sales, though. I didn’t need those. So, fast forward to today, I completely ignored the business side of it and continued developing what I felt like developing. Inevitably, after a while, I was slowly starting to go broke, but I had a lot of fun developing features, yay! For example, I took Roslyn and used it to add C# support, intellisense and all. LINQ queries on Excel tables, for God’s sake, you can’t tell me that doesn’t make your heart beat just a little bit faster.
At this point, a reasonable question to ask might be: “Why in God’s name would you build an IDE in Excel, I thought developers hate Excel?!”. And you’d be right, most developers don’t care much for Excel, but that’s only because it doesn’t actually let them use their tech skills. But not everyone is technical, and spreadsheets are almost everywhere, especially in companies. Working with this data and getting data in and out of spreadsheets is a tedious process. Good tech tools would make dealing with data in spreadsheets a whole lot easier. Additionally, imagine how much easier it would be to build prototypes and small applications if instead of VBA you could use C# (and LINQ) in Excel. You could write business logic in C#, load data from all sorts of APIs and use Excel for everything else: storage, user interactions, and visualizations. Having Excel as part of your application could give you a whole lot of functionality for free. Excel might not seem fashionable, but it’s really useful and in business, you can pretty much count on most people having it on their machines.
So here are some of the interesting things you can do with QueryStorm:
- Using C# in Excel
- C# user-defined functions for Excel
- Automating workbooks with C#
- SQL functions in Excel
Anyway, a few months ago, by chance, a guy I know asked me if I wanted to apply to this Polish accelerator. I said, “Yeah, sure, sounds good”. He saw right through my cunning attempt at blowing him off and said “no yeah sure… APPLY, NOW MOT*******ER!”. Well, apply I did, and it was fantastic. I spent four months in Warsaw, met a bunch of really cool people, got some new friends, got financing and some useful new skills like presenting. Could have been worse, all in all. I’m really grateful both to Luka (the super cool dude who made me apply) as well as to the HugeThing team. If QueryStorm succeeds on the market, it will be in no small part thanks to theese amazing gentlefolk!
So anyway, I have this IDE… wanna check it out?