Gingko's Development Philosophy

I wanted to share some of the thinking that goes behind selecting and planning new features for Gingko.
First, please read the “Improving Gingko” category rules of thumb.

The most important thing to keep in mind about Gingko is that it’s both powerful and simple.

It’s being used for all kinds of things, from API documentation to history papers, from fan fiction to legal briefs.
Often Gingko will have two or more wildly different use cases for the same person.

I used to call this Gingko’s “biggest problem”, because everywhere you look in the tech space, they tell you to “focus on one niche” and “go as narrow as possible”. It makes marketing and development so much easier.

However, I’m starting to understand that this power and simplicity is Gingko’s core strength.

So when I cycle back around to programming mode, how do I select what features to implement?
I use the Power/Complexity ratio.

  • Features that add power but also add complexity will rarely be considered.
  • A feature that increases Gingko’s power & flexibility while adding no additional complexity, is a nice bonus.
  • A feature that reduces complexity while keeping Gingko as powerful, is a nice simplification.
  • Features that increase how powerful Gingko is to everyone and reduce it’s complexity,
    are beautiful to me, and will be my primary focus.

By “Power” I mean “allowing more people to do more things”. It’s power in the sense of “flexibility”.
By “complexity” I mean “cognitive load”. How many buttons, menus, and concepts make up Gingko.

So if you have a feature to suggest, ask yourself:

  • Will this be useful to everyone?
    Project managers, and middle school students. Lawyers and RPG gamers. Authors and engineers.
  • Can this be simplified?
    Combined with a concept or feature that already exists?

I’ll be the first to admit that I’ve strayed from this philosophy many times in the past.
It’s a very stringent set of criteria!

But if we try our best to adhere to them, I’m convinced that what we end up with is software that brings more value to more people, and just makes the world a better place :blush:.


I am using Gingko as a management tool.
First column contains defined areas of focus…and trees extend right from each of those.

I find that as I move between the trees and columns…refining, editing, re-aligning cards…I leave a clutter behind me
with the focus of each stack just left where ever it was when I focused away.

Yet…when I re-approach the overall…I want all cards in all trees to be aligned at top card.
Fresh and reset. Like an unshuffled deck.

Therefore…I suggest an option…or a button, to globally(?) reset focus
to the top card in each stack.

In addition…the ability to undo the last few editing actions would be an obvious improvement.
I accidentally deleted a few cards and was looking for an undo arrow.

Nice work on this.
I look forward to using this tool.



I applaud the philisophy, and wanted to make just one comment – there is difference in increasing complexity (intorducing more concepts, adding new interface elements etc.) and increasing power.

Basically there are companies that reduce second in order to reduce first (think Apple) and ones that increase complexity in order to increase power (countless niche targeted developers).

(And of course they both are wrong approaches, as you already know).

But people tend to overlook flexibility, meaning possibility to do something more advanced when they will need that – and after some time, most people will need that, because people using any software will get to know it, get experienced with it, and find something they are lacking.

For me Gingko appeals, because it’s super simple, and while also ultra-limiting for advanced users, you’ve made one of the best choices how to allow unlimited power – you provided API. So while it is almost impossible to do anything really useful (other than outlining and writing), I can quickly adjust it’s functionality by performing operations on json export and reimport.

And it’s really shame that it’s lacking some rudimentary shortcuts or interface to simplify that, such as possibility to perform any operations on selected node (get ID for example, assign tags/group/type [name isn’t important], change export or viewing options, share etc.) or to select multiple nodes (in order to perform the same operations).

People will usually want do tweak only very little (change look or behaviour or only one or two types of elements), and after doing some tweaks in the tree they will most likely not touch this option again.

But these personalized “small tweaks” will make hugest difference for them. Different tweaks for every person (and often for different types of projects they will do).

So what my advice would be, is to:

  1. give possibility to do these tweaks (clear API and documentation for data operation, importing and exporting, editing and presenting data).

  2. give people possibility to share this tweaks.

Think about how powerful are modern browsers – in reality they aren’t doing much more than they did 20 years ago; but they allow for plugins and extensions, and that’s why you can work with every new technology.

(Or even simply ask yourself why you build Gingko as a web application (I could bet money that it was because it was possible because of technologies and tools that made it possible to write only the features you wanted/needed [your great interface], using only simplest and easiest to use solutions that allowed that – markdown for text formating, json for api communication, external tool for file uploading, probably some simplest database solution needed to store data in, some simplest to use cloud hosting etc.).

You already have created templates for many types of projects, but what people need is always possibility to create their own “templates” (and by template I understand here actions possible to do, behaviour and appearance of elements that will allow them to use your application in a way THEY want).

Bottom line is that you need to think about Gingko more in terms of unique framework for creating (== tweaking, customizing and personalizing) their own versions of the app, and not one tool that allows to do everything in theory, but if it will not grow organically with user base (and their contributions in making it better to suit millions of people in their dozens of millions different applications), it will be overtaken by some open source or corporate alternative, that – because tweaked by millions – will better fit their needs.

You have great, simple foundation, and you shall do anything possible to allow for people to build what they want on those foundations (by increasing flexibility), and they will increase it’s power beyond what you can imagine. But if you will try to build perfect tool for everyone, then you will never be able to become a standard.

(Long story short, build an ecosystem, no single tool without possibility to adjust it for the task, will ever be universal).

Take care,