On 29/05/2014 17:51, Kevin Burke wrote:
Hi! I am the author of Doony <http://github.com/kevinburke/doony>, a skin on top of Jenkins that's been downloaded/used by developers at EBay, Instagram, Netflix, the BBC, Panic, and other web companies, and starred by over 600 developers on Github. We also use it extensively at Twilio, where I worked until very recently.

Here are the problems I set out to solve with Doony:

- *Jenkins by default has small click targets,* for forms, buttons, and links.. Per Fitts Law <http://www.asktog.com/columns/022DesignedToGiveFitts.html>, small click targets take longer to locate with the mouse and make the UI seem more frustrating. In addition some users with poor eyesight or motor control have difficulty with reading/selecting small text. I made the buttons and links much bigger, and added padding around links so a mis-click (or tap, on a iPhone) would probably still take you where you wanted to go.

- *The most common actions were not easily available.* Specifically, 1) from a job's homepage, *I wanted to view the console output of the latest build*, and 2) *I wanted to be able to trigger new builds from any page on a job.*

- Various small UI changes - I felt that a lot of the icons (weather metaphors etc) did not add much value so I killed them, and the console could benefit from looking more like a console.

Here are the most frustrating problems I ran into:

- When writing a theme,*it's difficult to select elements with CSS*. For example, here's the rule I'm using to style the "Console Output" - hopefully nothing else in pre-1.538 Jenkins uses pre tags: https://github.com/kevinburke/doony/blob/master/src/doony.scss#L649. The bottom line is, if it's easier to select elements/skin, it's easier to get more experiments in UI and more data about what works and what doesn't.

NB: This has gotten better, and I've also submitted some PR's to add classes/ID's to make theming easier - see https://github.com/jenkinsci/jenkins/pulls/kevinburke?direction=desc&page=1&sort=created&state=closed.

- Some things don't have API's. For example, *creating a new build doesn't return the build number*, so you need to GET the job list to get the current build number and just hope the build you created will be the next one. See for example https://github.com/kevinburke/doony/blob/master/src/theme.js#L274. Similarly, there's no API for retrieving the console output. There's no API for retrieving global settings, which would be really nice and allow people to set items like the text in the title bar, or the theme's colors, or any number of things. At Twilio we routinely wrote Python scripts that simulate UI requests to trigger builds etc.

Basically with a UI, my guiding principle is *make the things you do the most often the most visible*, and the job homepage and the sidebar aren't great at this currently. I know people use Jenkins in a lot of different ways, but some user studies or testing could probably reveal the two or three most frequent use cases, and then the job page / instance page could be designed around those. One big win I think would be to move the console output right onto the homepage.

Finally, a few notes about specific points in this thread.

- I'm not sure about bundling websockets/a single page app with a UI redesign, for a few reasons. For one, it sounds like several large UI rewrites have failed in the past, which suggests that small, incremental changes might have a better chance of succeeding than a single bundle updating a whole lot of things. For example, one week you make the forms have round corners, add 10px padding between them and and a size 14 font, the next week you make the buttons bigger, the next week you add an API for global settings, etc. There's a lot that can be done to improve the UI/usability without necessarily making people upset.

Second, I use Travis CI for building most of my Github projects, but one of my biggest frustrations with it is its occasional ability to pin a CPU, render a completely blank page, render nonsense, become unresponsive, etc. Travis CI is a single-page app. The failure modes of Javascript are legion, especially for people on flaky connections, and maybe not as well understood as the combination of HTML/CSS/occasional AJAX requests, for developers. *Jenkins' reliability in delivering a UI should be considered a core strength.*

- I didn't have too many problems with Jelly, despite never using it before. However, I did mistakenly edit one template and assume my job was done, when in fact I needed to edit an additional template to make the changes I wanted. <https://github.com/jenkinsci/jenkins/pull/1100/files> The current level of abstraction makes things a little difficult :) Perhaps a smaller number of larger files would be easier to edit.

- I also have not had too many problems with content not updating dynamically; it does so in the places where I expect it to (console output, triggering builds, though maybe not as quickly as I would like).

Thanks,
Kevin

PS: If someone from Cloudbees would be interested in helping me get a Doony demo running fulltime on Cloudbees, I would be very grateful.
Kevin, thanks for this. This is really great information and advise. I think you are totally on the money. Kohsuke made the same comment about the possible reasons why other bigger efforts were not as successful as hoped and that small incremental improvements might having a better chance of success. Makes sense, considering the rate at which the Jenkins codebase is evolving.

--
You received this message because you are subscribed to the Google Groups "Jenkins 
Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to