This is one developer's Point Of View:
Dno was created out of frustration with the Arduino IDE. In particular:
its slowness;
The IDE is slow everywhere. It's slow to start, slow to compile, slow to do anything.
Also some operations block the IDE completely. For instance, while you are installing new boards the editor is unusable.
its clunkiness;
Everything about it is clunky. The tiny edit window. The weird buttons. The way that it always starts up halfway between my 2 monitors. The menu entries that look like headings...
its attitude;
Its attitude is the attitude of all IDEs. The attitude is that this is how you write software: it's the best way; every other way is inferior; why would you want to do anything else; if you don't like it you must be missing something. For the Arduino IDE, it's maybe a little worse than most IDEs because its not very good. It has a really crappy editor that has no interest in how you want to use your filesystem and that does not have the power of the tools that you normally use.
“But this is the right way to do it. Obviously. Why would you not want to do it this way?”
That's the attitude I'm talking about. And it sucks.
Many IDEs have that attitude. And many of their users buy-in to it. You will often hear the question, “why would you not use whatever?”, when the real question should be “why can't I use more flexible and powerful tools that I am already familiar with?”
its inflexibility.
The editor has no flexibility. It is neither powerful nor customisable. It doesn't, by default, access your normal files, and creates new files where it wants to, taking no account of the way you want your directory structured.
The IDE, as far as I can tell, provides no way to actually develop libraries. You can write them, but you can't test them or document them.
So, I didn't like the IDE. I tried using a proper editor and cutting and pasting my code into the IDE. That sucked.
I know there are other IDEs, like eclipse, that maybe don't suck, but I still don't like IDEs.
And I know that I could use a different editor from the IDE, but then I'd be using an editor and an IDE, and that is no way to make things simpler.
I tried using the CLI. But the commands are pure mental: way too many parameters. That sucked. Even with some moderately smart scripts to run it all.
I found Arduino.mk. Finally, something that
didn't suck. It showed that normal tools like
make could be used.
But it was really stuck in the avr world,
and it still required a bit too much hand-holding, particulary
around library use.
I looked at hacking it, and discovered a lot about
make that I didn't know. It was a very
cool piece of work, but still not quite right.
I developed my own version of Arduino.mk
that tackled some of the problems, but it still didn't feel
right. Copies of the makefile had to be put in place in each
directory. But library discovery worked pretty well.
It all came together when I was trying to parse the
platform.txt file. I finally realised that
a simple transform could turn it into makefile syntax. And
then I discovered make's eval function and
suddenly everything was possible.
While I was developing dno I discovered a
number of other Arduino-compatible toolsets, but each one
seemed less flexible and more work to use than
dno was becoming. So I kept on, and here
we are.