About WebWidgets.io

Blog Single

Coding for Yourself

The idea of Widgets started with a simple question: why don't most programmers write software for their own personal use? Many professionals use their skillset for personal benefit, in addition to their day job. Chefs cook for their families, lawyers manage their own legal disputes, carpenters build their own furniture. So why do most programmers not build software for themselves? It's not that code is hard to write. Some code is difficult, but there are a lot of simple but useful applications that are quite easy to build.

The theory of WebWidgets is that the reason many programmers do not write software for themselves is not that software is hard to write. Instead, the obstacle is that configuring, hosting, and monitoring the system architecture - databases, backups, servers, DNS records, and so on. The Widget framework takes care of all the tedious backend stuff so that developers can build webapps for their own personal use.

An Open Core Strategy

One of the greatest dangers facing any technology investment is the threat of lock-in. If you make a big investment in a platform, and then the vendor that created the platform realizes they need to crank up prices to make their VCs happy, you can find yourself in quite an unpleasant situation. On the other hand, pure open source projects often fall victim to maintainer burnout. The programmers who have been keeping the project afloat, without any financial compensation, decide that life is too short and they want to spend more time with their family. So the project gets abandoned.

We believe that the open-core approach to software development is the best way to protect against both of these bad outcomes. In this approach, customers are protected against the worst price gouging and quality downgrades, since they can always move to the open version if necessary. At the same time, developers stand to realize a modest profit if the product is successful, because many people will want the advanced features and improvements of the premier version.

Based on that belief, we've made the core of the WWIO platform open source. You can see the code in the Java Code section of the repo. You should be able to install the core server on any machine that runs Linux, see our Installation Instructions. The community version has everything necessary for basic Widget operation, but lacks some extra features like Blob Storage, Email Sending, and Google Export. If you are interested in contributing to the core codebase, please reach out.

History

I started building the Widget framework almost 10 years ago. Prior to that, I had been relying on a kludgy combination of Google Docs, spreadsheets, and handwritten notes to help with productivity and time management. Initially, I never planned to open up the framework for anyone else. I figured I was the only one who was eccentric enough to want to invest a lot of time in writing my own life-logging apps.

But over the years, several things happened. First, I improved and simplified the framework, so that it became easier and easier to write widgets. Second, I started to find more and more areas where a Widget could be helpful. For example, recently I built a Widget to help myself memorize Chinese characters, and that has been absolutely transformative for my Chinese reading level. Third, my "core" widgets started to become an integral part of my lifestyle and work habits. I start every day by going through the activities listed in my Morning Routine Widget (inspired by Atul Gawande's book the Checklist Manifesto), and this has been amazing in helping me stay organized. So at the same time that the difficulty of building Widgets went down, their value went up.

A Love Letter to SQLite

In my opinion, the world is full of lousy software - I appreciate this Jonathan Blow talk about how the failures of software engineering could actually threaten our civilization. Among all this garbage, SQLite stands out as one of the best pieces of software ever written. Part of my reason for building WebWidgets was that I wanted to use SQLite, and convince other people to use it also.

You can think of WebWidgets as a JavaScript ORM for SQLite, that runs over HTTP. WebWidgets would not be possible without SQLite. If the Widget data were backed by a standard RDBMS, it would be impossible to allow users to create their own schemas. If JSON were used as the backing store, it would be awkward or impossible for the system to correctly deduce the data schema by examining a user's upload.