← Back to team overview

kicad-developers team mailing list archive

Re: UI and usability enhancement

 

On Wed, 12 Aug 2015 00:09:06 +0200
Attila Kinali <attila@xxxxxxxxx> wrote:

> So, I would like to ask, whether there would be any interest of the
> developers to work on the UI. If so, I would start collecting
> points on the UI that are worth to work on and how to improve them.

Ok, here is a list of the things I stumbled upon in the UI.

Generally, there are very few strict rules in UI design, most of
it is opinion. So, please accept the things I list here as my view,
which most likely will differ from yours. I do not intend to impose
my view on you, but rather want to give an insight on what someone,
who has done quite a bit of electronic design, finds cumbersome when
using Kicad. Also, the list is quite skewed to issues in pcbnew,
because that is what I was mostly using last week, when I took notes.

I also incorporated the comments I got from my friend Andrew Bradford.
These are marked with (bradfa).

All comments are based on kicad from bzr from about a month ago
(2015-08-10 r6080).

Of the general rules of UI design, the most important one is consistency,
both internal and external. Consistency helps the user to develop a mental
model on how the application is supposed to work. This help in not needing
to remember exactly how to do X, but being able to derive the key presses,
mouse movement, etc on the spot. External consistency is a behaviour similar
to other applications, internal consistency behaviour that is similar within
the application itself.

One example where Kicad fails with internal consistency are the symbol and
component editors compared to the schematic and layout entry respectively.
Even though they do very similar things, they work differently.
An example where Kicad fails with external consistency is the use of the
mouse wheel. While all EDA, CAD and simple drawing applications I've used
in the past have the following mapping:

wheel 		-> up/down
shift-wheel 	-> left/right
ctrl-wheel	-> zoom

Kicad has the following mapping:

wheel 		-> zoom
shift-wheel 	-> up/down
ctrl-wheel	-> left/right

And this is probably my biggest gripe with Kicad. Even after several weeks
of using Kicad, I still use the wrong one in the first try. If possible,
I would advise to change this before the release, as the release will
attract a lot of people who have never used Kicad before and they will
for sure stumble over this as I have. Especially as this cannot be changed
in any of the preferences menus.

The second most important rule of UI is to make things explicit. Do not
hide the state a certain tool is in, but show it somewhere. For example,
the push-and-shove router only works with the OpenGL canvas. This is highly
non-obvious. I had to look at Tomasz introduction video twice to spot the
hint that I have to change the canvas. Also, the differen canvas behave
differently. This is _not_ a good idea. If there is need to have multiple
canvas types, then make them behave exactly the same, or at least as far
as possible and warn the user when he is trying to do something that the
current canvas type does not support. But better still: remove all canvas
types but one.

In a similar vein, why the heck is dragging behaviour of tracks hidden in
the track settings context menue? It took me half a day to figure out why
dragging tracks moved the whole track element instead of drag the track
elastically. Even though I guessed it was some setting somewhere, I could
not find it in any preferences menu. A good way to at least alleviate
this issue is to put all persistent settings into one big (tool-)global
preferences dialog. If you have a look at commercial EDA/CAD tools, they
have humongous preferences dialogs, with hundreds if not thousands of
settings. Yes, this is cumbersome. But at least you have a chance to find
a setting there, even if it means to check each sub-dialog.

The place where Kicad has done this right are the lists of key shortcuts.
Heck, I love this! I wish more tools had an accessible list like this,
that is only two mouse clicks away!

The third rule most important rule (in an CAD like application) is the
placement of keys and symbols. The farther they are apart the more mouse
and hand movement is necesssary to use them. E.g. a wire is placed pressing
W, but to end it, one has to press K. While this would be ok if one had
both hands on the keyboard, but for this task the right hand rests on the
mouse and draws the wire. So one has to either lift the right hand from
the mouse or move the left hand over to the right half of the keyboard.
While the first is a natural movement, but has a long distance, the second
one is an "un-natural" movement and forces one to look on the keyboard to
find the right key. Yes, one can change the key settings. But honestly, how
many people will do this? Most, especially casual users, will just live
with the default settings (and even for "professional" users it is usually
a good idea to stick with the defaults, as it helps when working in different
environments).


Ok, now for the real part:

General:

* (bradfa) Make a wizard for the creation of a project, which allows to set
	- Whether the default libraries should be used or not
	- Paper size

* (bradfa, me) Create a way to gracefully handle changes of schematic
   symbols and footprints. Currently, they get silently replaced, which can
   (and often does) lead to problems. Either cache the symbols/footprints
   in the project or versionize them such that changes can be caught.

* The mouse wheel and navigation (as mentioned above).
  Make it consistent with other EDA, CAD and drawing applications:
  wheel -> up/down, shift-wheel -> left/right, ctrl-wheel -> zoom

* (bradfa) Allow for copy/paste and a move ability across pages.  This would
  be hard given the way the selection and copy/cut operations work with the
  drag a box around things workflow.  Not sure what the right way to solve
  it is, but it should be solved.

* Fix the drawing issues (ghost lines etc). Yes, I know, this is most likely
  a bug in wx. But it is annoying as hell. So if wx needs to be fixed, then
  fix wx.

* Get rid of plot vs print. Use one that does the right thing


Schematic entry:

* Print by default in color. We are in the year 2015. Most people have color
  printers these days. If you think it should configurable, then make a config
  option somewhere, that is _global_ and does not revert to the other thing
  when you use a different path for printing.

* Make powersymbols global netlabels that do not depend on being in the right
  library. Heck, this is the most cumbersome way to define power symbols I have
  ever seen! For every new power rail I define, I need to create a new power
  symbol. And above all, it has to be in a library called "power", which of
  course is not documented. Additionally, this masks power symbols with the
  same name. The "right" way to do it, would be have specially marked symbols,
  (have a property POWERSYMBOL) that have a name field which doubles as the
  net label. This way, one can create one symbol of the right form, set it
  in the schematic, and change its label according to the needs.

* Create a junction automatically, when a wire is passing over a pin.
  This is usefull when, e.g. placing a dozen blocking C's. Then you just
  pass with the wire once over all, instead of having to stop at each C.
  Actually better still: When a pin or a wire ends on a wire, connect them,
  even if there is no junction.

* When creating/placing netlabels: remember the last created label.
  It is normal to set a label at multiple places at once, and also
  to have multiple labels that are named similarly.
  As advanced feature: if the label ends in a number, automatically increment
  the number.

* (bradfa) Allow for non-hierarchical multi-sheet schematics. Especially for
  big parts or boards where there are many big parts (think 1000 pin BGA
  and 64 bit wide DDR3 and other "modern computer things") it's simply
  easier and more elegant looking to organize a common set of parts across
  more than one non-hierarchical sheet.  Being forced to use hierarchy
  means either I'm going to have to use a bigger sheet (which I can't
  print, most people can't print on A3 size paper, let alone larger) or I
  have to break my single unit of schematic up into yet another hierachy,
  which for things like DDR, especially in something like a 64 bit wide of
  x8 chips, is hard to fit onto one page.


Schematic Symbol editor:

* Explicitly make it clear which symbol is being edited. The name should be
  placed somewhere prominently. Either in the title bar or in a corner of the
  window.

* Allow for multiple symbol editor windows to be open, for easy copy&paste.

* Add a pane with a view of the library. This would allow for faster selection
  of the symbol one wants to edit/view.

* Get rid of the double-confirm needed to save a changed symbol (why do I need
  to save the changes of the symbol and then again save the changes of the
  library?)



Layout editor:

* I do not really like the idea of having the board on a sheet, though i
  can understand the reasoning. IMHO it comes from the old pen and pencil
  times, when people drew on pre-made sheets of paper. Today, i don't really
  see a point here. Yes, having some text describing the layout somewhere
  (the sheet header) is nice, but why place the frame as well?

* Start with a board creation wizard. In 99% of the cases people will start
  with a rectangular PCB of a predetermined size. A wizard would allow for
  a quick and easy creation of the board shape without the need to place
  a number of lines precisely. The wizard should als create an automatic
  keep out line around the PCB (there is usally a 0.5mm to 1mm keepout
  at the board edges for production reasons. For PCB separation by scoring
  this goes up to 2-3mm).
  To make be able to call this wizard at a later stage (or not cal it at all)
  would be also a good idea.

* Make board edges a polygon line. I.e. disallow the breaking up of the closed
  shape by moving a single line. Breaking of a polygon should be explicit,
  when the user demands it, i.e. to insert another line shape. And those should
  "snap" automatically into the polygon again and be not be broken until 
  requested.

* All components should be placed next to each other, sorted by sheet they
  are on. Not ontop of each other.

* Allow placing explicitly a single via. And do not remove the netlabel of a
  via if it's not connected to any track. The reason for this is simple: after
  a layout is finished, I hunt for places where the ground (or power plane)
  connectivity is not good over different layers (think long parallel tracks
  on the bottom layer that carry high frequency signals, the ground between
  the tracks becomes a long (but wide) wire itself. Adding a via every now
  and then connects the ground to the ground plane on another layer.)
  Currently the only way to do this is to place a track that starts at some
  GND pin and runs in a zig-zag course over the PCB. 

* Allow to place a track in the middle of nowhere. Reason is similar as above.

* Allow to set the net of a track/via explicitly. Not only while drawing
  the track/setting the via, but also afterwards.

* Make all canvas feature complete and equivalent. (reason given above)
  IMHO make the OpenGL canvas the default one. It's the one with the nicest
  features. Also it does not screw up every time one draws a track.

* Allow rotations in both directions. (probably R, shift-R). Make R the one
  that goes in clock-wise direction, which is the "natural" direction for most 
  people.

* The important key shortcuts are all over the keyboard, which means 
   the user has to constantly move his hands around (see above).

* Switching of trace width is.. meh.. the default canvas allows only to use
  pre-defined values (which is nice in theory, but not when you have to add
  every allowable line width explicitly into the settings). The OpenGL canvas
  allows to set to a value. Which is IMHO nicer, but there should be some
  "remembering" of old used values that present themselv in a drop down menu.

* All dialogs for creating something (planes, etc) should remember their
  settings that have been previous used. Chances are high I want to create
  another instance with the same settings.

* Give unconnected pins a "No Net" label instead of a random netlabel.
  The random netlabel is confusing. One does automatically want to find
  the other component/pin that connects to it.

* Create an un-select key shortcut.

* Zoming centers the window at the point where the mouse pointer was
  pointing to. This sudden jump is very annoying. Instead the point the mouse
  pointer is pointing to should be kept fixed and the zoomed window moved
  accordingly.

* When moving parts references, highlight the part it belongs to.

* Make highlighting and masking levels configurable by sliders
  (Altium does that in a very cool way)

* Place a small scale at the lower right corner. It is often very hard to
  judge how large something is, when doing the layout. A ruler would allow
  to have a quick look, to verify that one is actually drawing something
  roughly 1mm in size and not 10mm in size.

* Allow for different line thickness on non-copper planes.

* Allow for arbitrary shapes (rectangles, circles, rings, polygones) on
  non-copper planes (e.g. for modifying the paste mask or solder mask)

* Add a "undo" for tracks while drawing them. If I am drawing a track
  and realize I've passed a component on the wrong side and thus have ended
  up in the wrong spot, I want to be able to backtrack to the place I went
  wrong and continue from there. Currently, I either have to cancel the track
  and start from zero again, or place the track and delete the part that is
  wrong and start from there.

* Have a toggle (key shortcut) between "show all layers" and "show only active
  layer". In complex boards with more then 8 layer (sometimes even from 6 up)
  the other layers start to confuse and I want to disable them. But from time
  to time i need to know where I am and need to quickly reenable them.

* Enabling/disabling layers takes way too much time when area fills are  
  involved. I have here a simple design of 10x8cm board, with few components
  (two dozen in total),  but it already takes a second to enable/disable
  a single layer.

* BUG: Two area fills with the same priority but different nets will overlap,
  when drawn over eachother. The right thing to do here is to draw the area
  fills in a specific order and to cut later ones off when they get too close
  to another fill. Of course, this will then need some form of configuration
  in which order the fills are drawn (could replace the priority).

* Mouse drag behaviour "interactive" is what people would expect today.
  Please make it the default.

* Allow the grid to be changed with a key command that makes the grid
  smaller/larger.

* Allow the grid to be switched off completely.

* Make pin snap-in radius configurable.

Footprint editor:

* Explicitly make it clear which symbol is being edited. The name should be
  placed somewhere prominently. Either in the title bar or in a corner of the
  window.

* Allow for multiple symbol editor windows to be open, for easy copy&paste.

* Add a pane with a view of the library. This would allow for faster selection
  of the symbol one wants to edit/view.

* Make measurements easy and intuitive. The current "press space and watch
  the status line" is not! This requires at least an explicit command.

* Allow the grid to be changed with a key command that makes the grid
  smaller/larger.

* Allow the grid to be switched off completely (especially important
  for measuring things).

* Create a "snapp to nearest center/vertex" option (also important for
  measurement)


Yes. I know. This is a damn long list. But this is still just the beginning.
There are many issues, a lot that you only realize when you use the tool for
the first time (because you get used to the quirks) and others that you only
realize after using the tool for some time. Especially consistency issues
are quite difficult to catch. I still hope this list is usefull.

Please let me know what you think.


In an other note: I love the new website! It is a lot better!
Especially the documentation is now the first thing one sees
and thus does not have to search for it anymore!


				Attila Kinali


-- 
It is upon moral qualities that a society is ultimately founded. All 
the prosperity and technological sophistication in the world is of no 
use without that foundation.
                 -- Miss Matheson, The Diamond Age, Neil Stephenson


Follow ups

References