One unfortunate habit I see people get into is only using one kind of database. Once you get familiar enough with a particular family – say, document databases, or traditional relational databases – it's easy to try to shape all your future problems into that paradigm. Oftentimes that ends up meaning just one single database that you constantly push the limits of when you should really use a different one that suits the domain better.
But maybe there can be a single answer, if it's an answer that lets you adapt the database to the situation. What if you had a build-your-own-database? Instead of prividing you with a high-level preworked answer to the various tradeoffs, it would give you a lower-level set of primitives that you could combine to let you fit the database more naturally to the problem domain.
I'm not entirely sure what those primitives would be – probably some combination of indexes, hash joins, triggered events, and maybe a few options for low-level storage – but I think it'd be an interesting project to figure it out. Databases are too useful and powerful to stick with just one.
One thing I've been noticing recently is that certain kinds of work get much harder as it gets later in the day. Mostly these are things that require a lot of thinking, but also things that are not particularly enjoyable at the time despite being beneficial in the long run. These kinds of tasks seem to require a particular level of motivation that it's easy to run out of.
For some reason, however, it's very tempting to leave those things until later. It's not even necessarily that they're unpleasant; it kind of feels like you need to work up to them, like it would be too much of a jump to go from nothing to immediately working on a big complex problem or something you aren't expecting to enjoy that much.
However, I'm beginning to think that feeling has no actual basis. When I do the most challenging stuff first I almost invariably feel better about everything else after it. I know that the most difficult thing is already in hand, so the rest starts to seem much more manageable and predictable. What's more, as I start getting tired, it's great to have the easiest and simplest things left to do because I know I have less motivation available.
In software it seems common to crown systems for prioritising work as "X-driven-development", for values of X like test or or behaviour. I like to think of this as motivation-driven development. However, I'm not arguing for doing the most motivating work early, but rather the work that requires the most motivation. I think that in many situations it's the most scarce - and important - resource you have.
This weekend I've been playing Factorio, a kind of base building game where you start off gathering resources and making structures, but slowly automate more and more until eventually you're like a kind of logistics gardener, just walking around and tending your production pipelines.
The great thing about the game is that the level of abstraction scales up as your abilities grow. You start off learning the game at a very low level, but as you learn how the basics work it quickly becomes unnecessary to use them. Instead, you can move on to more advanced skills that abstract away the things you already know. It gives a wonderful sense of satisfaction later on looking at the immense amount of work you could have done from scratch, but didn't.
I think this is an important quality in other fields too, not least of which is software development. Good software is designed by building large abstractions on top of smaller ones. And yet we often do a woeful job of passing on those abstractions to others in a meaningful way. Despite how great it is to learn from the bottom up, we usually teach from the top down. Or, often, just teach the top and hope they figure the rest out.
It's no coincidence that games are surprisingly far ahead in how they educate and motivate people. Unlike in the real world where you are often compelled to stick around, entertainment has to earn your attention every moment, or you'll simply do something else. It's amazing that in an environment that unfavourable, many games can still approach deep concepts and complex skills. More than anything else, I think it's a testament to how much we enjoy learning and exploring when it's done on our terms.
Another in my series of to-do list variations: the been-doing list. One thing I think to-do lists are particularly bad at is ongoing or maintenance goals. "Go do this thing" makes for a great to-do item, but "keep doing this thing forever" just sounds unsatisfying. However, ongoing goals can be very useful! It's just a matter of finding the right way to frame them.
With the been-doing list, you instead write down habits or ongoing goals you want to achieve, and keep a record of long you've been doing them. I think putting a check next to the habit each day you keep it up is a great way to do it, but I've also heard of people using physical calendars and marking off days. Either way, the point is that over time you build up a record of how well you've stuck to the habit.
With a regular to-do list, the main motivation is to clear the list, to work subtractively. While that makes sense for tasks, I think the best thing for habits is the opposite: to feel like you're buidling something over the course of many small steps.
I was reminded today of an idea I've wanted to implement for ages: a superlative number marketplace. I've often wondered if there's a good way to solve the very pressing question of which is the biggest superlative number. Is it a squillion? A zillion? A bajillion? Until now, we've had no way to find the answer. However, I believe with the appropriate combination of the wisdom of crowds and free market economics, this problem like so many others will fall.
The way it works is this: you start with some amount of superlative currency. Say, a squillion dollars. You can then place buy and sell orders on a big market to trade away your puny squillions for the much more valuable gajillions or hojillions. Or vice versa, if that's your thing. Over time, these trades would settle on an approximate collective valuation of the various fictitious numbers.
There are still some things to work out. Mainly, I'm not sure how value enters the system as people sign up. Do new players automatically get a fictitious unit of their choice? That seems like it would violate the no inherent value doctrine. On the other hand, the absolute values aren't really important, it's the exchange rates revealed by trading preferences. I don't know enough to really predict whether how different sources of value would distort the market.
Regardless, I think it's important that these minor problems be resolved in short order, so we can get to the important business of determining which is the most superlative superlative number. We do this thing not because it is easy, but because it is hard.