Entries filed under: User Experience

Back to Index

Want to get involved in improving Puppet products? Become a Puppet Test Pilot

Posted on
By
Jenny Mahmoudi
in
Blog, Community, Design, PuppetConf, User Experience, Users
Responses
0 Comments

The new Puppet Test Pilot program is looking for people like you who can help make our products better (and your life easier). As a Test Pilot, you’ll get to preview new features, vent about current ones, and help the software solve the right problems—yours, of course.

What is the Puppet Test Pilot program?

The Puppet Test Pilot program is our way of getting to know Puppet users better. We’re on a mission to make a ridiculously awesome Puppet experience for you. Isn’t it obvious we need you to make that happen?

What does a Puppet Test Pilot do?

As a Test Pilot, you’ll be invited to a Puppet Test Pilot session every few months, but your participation is not required every time. Puppet Test Pilot sessions are typically one-on-one with you, a Puppet Labs employee, and a prototype of a new product or feature, and take just 20-60 minutes. You’ll be able to try a few tasks with the prototype and we’ll listen closely as you think out loud. Information from the sessions will be used internally to improve our products.

You can participate remotely via web conference or in-person at our office in Portland, Oregon. And for every completed session, you’ll receive an Amazon.com gift card.

How to Join

There are two super easy ways to participate.

  1. At Puppetconf, stop by the Puppet Test Pilot booth and spend 20 minutes working with a Puppet Labs employee who’s eager to get your feedback. Find us in the Expo Hall from 10am to 4pm on September 27 & 28.
  2. Join the Puppet Test Pilots program to learn about upcoming sessions and participate when it’s convenient for you. Sign up here.

Either method you choose will give you a chance to try early prototypes of our software, and will have a direct impact on our products. We look forward to working with you!

Learn More:

The Design Behind Puppet Sites

Posted on
By
Daniel Sauble
in
Blog, Community, Company, Design, General News, Opinion and Interview, Puppet Lore, Tips, User Experience
Responses
0 Comments

Design is an integral part of the way we build software at Puppet Labs. More specifically, we strive to answer a very simple question: what does the user need? This isn’t always an easy question to answer, but we’ve been happy with our success in doing so. User empathy is our conduit for user satisfaction.

In real-life terms, what does design at Puppet look like? Let me show you a project that just finished its initial design phase: Puppet Sites.

What do users need?

Puppet admins want to spend their time managing nodes that are under Puppet control. They don’t want to spend their time adding nodes to their deployments. On the contrary, their goal is to start managing new nodes as quickly as possible. We formalize this need in the following way:

As a Puppet admin I want to easily add new nodes to my deployment so that I can start managing them as quickly as possible.

How do we we satisfy user needs?

The current workflow for adding nodes to a deployment is as follows:

  1. Configure puppet.conf with the location of the master/CA
  2. Perform an agent run on the node
  3. Login to the CA
  4. Sign the node’s certificate
  5. Perform another agent run on the node

The problem with the existing workflow is that it appears to have nothing to do with adding new nodes to a deployment and everything to do with signing certificates. There’s a disconnect between the workflow and the user need.

To fix this, we did three things:

  1. We introduced the concept of a site. A site is a service that owns the list of nodes in your deployment, the authentication mechanism for adding new nodes to your deployment, and the configuration of Puppet services in your deployment.
  2. We changed the semantics of the workflow, so that it directly addresses the user need.
  3. We eliminated the overhead of signing into the CA and manually signing node certificates. There are secure ways to do this that don’t involve user interaction over SSH.

The workflow now resembles the following:

  1. Login to the site host
  2. Generate a pre-shared key
  3. Join a node to the site using the pre-shared key
  4. Repeat step 3 for every node you want to add to the site

We now have a workflow to fulfill the user’s goal. But notice that we’re still not talking about sites in technical terms. This workflow could apply equally well to a Puppet Face, a REST API, or a Dashboard plugin.

How do users interact with our workflows?

It’s all well and good to produce a general workflow for addressing a user need, but eventually you have to tie it to a real user interface. For the initial release of Puppet Sites, we decided to focus on two user interfaces: a Puppet Face and a REST API.

A designer is nothing without regular interaction with customers. While designing user interaction, we stayed engaged with our internal operations and professional services teams. After several rounds of feedback, the design of the Puppet Face for the workflow given above resembles the following:

node02$ ssh admin@site02.domain.com
Last login: Mon May  7 18:15:43 2012
site02$ mount /media/usbdisk
site02$ puppet site generate key > /media/usbdisk/site.key
site02$ umount /media/usbdisk
site02$ exit
node02$ mount /media/usbdisk
node02$ puppet node join site02.domain.com < /media/usbdisk/site.key
Trying to add node02.domain.com to the site at site02.domain.com...
 Use `puppet site status node02.domain.com` to confirm success
 To stop waiting for the command to complete, press Ctrl-C.
   The command will still complete in the background.
Added node02.domain.com to the site at site02.domain.com

What do users think?

We strive to make our design process as agile as our engineering process. We specifically avoid a waterfall model, where the design is completed in an ivory tower, then handed over the wall for implementation. Instead, our designers sanity check their design with internal and external users, talk to architects and engineers to make sure they aren’t violating the laws of physics, and stay involved in the project until it ships, making course corrections as necessary.

The Puppet Sites project is still underway, but we’ve already discovered mistakes made early in the process, and corrected them. Each group of users has been vital to this iterative process.

Our internal users made us aware that omitting a pre-shared key system was a poor idea. By themselves, the two other fixes—changing semantics and introducing sites—weren’t sufficient to solve the user goal of “quickly” adding nodes to their deployments.

Our architects made us aware of a “law of physics” deal-breaker in the design, where users could have passed their pre-shared key as a flag to puppet node join. This would have exposed the key to sniffer processes on the host machine, and represented an unacceptable security risk.

Our external users helped us realize that the concept of a “site” is foggy at best and they didn’t really understand the problem it was designed to solve. Also, they were concerned that we were deprecating existing functionality without providing a drop-in replacement. We’ve been working to ameliorate these concerns by formulating clearer stories around the problems that sites solve.

Design at Puppet Labs

Of course, Puppet Sites does far more than just provide admins with an easy way to add new nodes to their deployments. For the sake of brevity, I’ve only highlighted this one user story. However, having a site also helps Puppet admins who want to…

  • …get a list of all the nodes in their deployment with a single command, so they don’t have to trawl multiple services to get this information.
  • …centrally manage the configuration of all nodes in their deployments, so they don’t have to manually manage puppet.conf on each node.
  • …access information about Puppet services from their manifests, so they don’t have to hardcode the location of their services into their manifests.

You can expect Puppet Sites to be available soon, as a point release for Puppet 3.0.

In summary, the UX team at Puppet produces three main artifacts: user stories, workflows, and wireframes.

  • User stories allow us to talk about the needs of our users in a non-technical, goal-oriented way.
  • Workflows describe the tasks users go through to achieve their goals.
  • Wireframes are mockups of the actual systems that users use to complete these tasks.

Not all of our projects follow this process exactly, but, in general, the above holds true. User story to workflow to wireframe. Rinse and repeat as necessary. That’s how we do design at Puppet Labs.

Learn More

Three Puppet Camps in Europe on the way

Posted on
By
jose
in
Blog, Community, General News, Puppet Camp, User Experience, Users
Responses
0 Comments

We’re happy to announce three European Puppet Camps:

Edinburgh, Scotland March 23 (only 20 tickets left!)

Register

Stockholm, Sweden March 28 (20 tickets left!)

Register

Amsterdam, Netherlands April 2

Register

Puppet Camps are 1-day community events for local audiences. Typically we’ll feature 3-5 local speakers along with a Puppet Labs Engineer. Schedules for all three Puppet Camps are available, but may change as more talks are submitted.

Teyo Tyree, the VP of Business Development and co-founder of Puppet Labs, will be at all three events. RI Pienaar, the creator of MCollective (the backbone of Puppet Enterprises Live Management feature), will also be at Edinburgh. Core contributors to the Puppet project and interesting users are participating in all of the camps.

Puppet Camp Edinburgh is hosted in conjunction with FLOSS UK’s spring conference. Puppet Camp Amsterdam is being co-hosted by Cloudera and (Puppet Labs’ local partner) AmazicSource. We’re in the process of expanding Puppet Camps from a bi-annual format to a roadshow appearing frequently throughout the year.

This year we are planning to hit New York, DC, Chicago, and either Melbourne or Sydney, but we’re also having conversations with organizers in Berlin and Geneva. If you think your city has enough interest in Puppet to support a 100+ person event, shoot us an email.

Our end user conference PuppetConf will be held at the Mission Bay Conference Center in San Francisco, CA on September 27th and 28th. Look for more details on PuppetConf in the next few weeks, along with a call for participation.

Introducing the Puppet Labs Community Manager

Posted on
By
Mike Stahnke
in
Blog, Community, General News, User Experience, Users
Responses
1 Comment »

Hello, I’m Michael Stahnke and I’m the new community manager at Puppet Labs. I’ll provide a little bit of background about myself, but then I want to jump into the important stuff around the Puppet community.

I joined Puppet Labs in April of 2011 as the first Release Manager. I was a member of the community and using Puppet since late 2006. I learned about Puppet from being a member of the Fedora Project’s Infrastructure group. I also was one of the people helping get EPEL launched (Extra Packages for Enterprise Linux) very early on. I still contribute regularly to Fedora/EPEL, and of course to Puppet, Facter, Dashboard, Hiera and Mcollective. I also love Infrastructure Operations.

There’s obviously a ton I could write about in regards to community. The community around Puppet is awesome. It’s certainly a key reason I wanted to use Puppet, learn about it, learn Ruby, and join Puppet Labs. Today I’d like to focus on what my goals for the community are, and address some areas where we’ve fallen short in the past.

My main goal for the Puppet Community shouldn’t be any different than the goals of the Puppet project:

I want infrastructure problems to go away.

I want quality system administrators to have more time to explore their domain, and make their infrastructure services an investment rather than a cost center. I want infrastructure engineers to spend time on differentiating activities rather than having every shop reinvent time synchronization, DNS management, and authentication setups.

One of the real reasons I liked Puppet when I got started with it was the community. There were smart people here. I don’t just mean people good at Puppet, but people who solved difficult systems management problems. The people in the community discussed solutions for provisioning, patching, packaging, deployment, compliance, auditing, disaster recovery and everything else that was consuming my day as an infrastructure admin. So the Puppet community centered (and centers) around people who were (and are) awesome at infrastructure. I’m very interested in continuing to foster those types of discussions.

Beyond that, I have some more concrete goals around community and Puppet.

I’d like to enable the community to host Puppet User Groups or meet-ups. This means developing a formula for what works, a budget process, and hopefully the output is something like a “user-group-in-a-box” kit.

I want to define and recognize contributors. We spend a lot of time focused on contributors providing us with code. We love you, please keep doing it. We also want contributors to be recognized for things like documentation, filing excellent bug reports, leading/attending user groups, uploading modules to the forge, integrating Puppet with other tools, etc.

In the current event bucket, we have the process around Google Summer of Code 2012. We participated in GSOC in 2010, and liked it a lot. This year we’d like to participate again. This means we need awesome ideas for projects. We’ve started an idea page at http://projects.puppetlabs.com/projects/puppet/wiki/GSOC12, please contribute if you have any ideas for GSOC 2012.

In sitting down to identify gaps in the community, or friction points, a few items bubbled up quickly. So, we’re going to address them as soon as we can.

  1. It is difficult to find material about the Open Source projects on our main website.
  2. We don’t do a super job recognizing members of the community.
  3. We don’t capture a lot of information about what you, the community, are doing. This type of input can make our product and documentation much better.

In the near future, look for some new content on our website, around community and the open source ecosystem.

I have several ideas on what we’ll do to fix these gaps. Some of this will require some patience and experimentation to get right as well. If you have comments and suggestions around the Puppet community, I’m available via Twitter (@stahnma), Freenode (stahnma), and email (stahnma@puppetlabs.com).

Look for a lot more to come in the future around community goals and involvement.

Additional Resources

Using Puppet Modules to Install and Manage WordPress

Posted on
By
Daniel Sauble
in
Blog, Community, DevOps, How to, Modules, Puppet Enterprise, Systems Management, Tips, User Experience
Responses
2 Comments »

Puppet modules are a fantastic way to deploy and manage specific applications. The Puppet Forge contains a wealth of third-party modules that allow you to do some awesome stuff with a minimum of work. In this post, we use a module from the Forge to solve a common task—using Puppet to set up a WordPress blog. Finding the best way to accomplish this with Puppet was a challenge, and helped us feel the joys and pains of those who use our software on a daily basis.

The first step is to install Puppet, Facter, and RubyGems. Since we’re using Ubuntu, we’ll use apt-get to install these packages. If you decide to use a different OS (or the Learning Puppet VM), use whatever package manager is appropriate for your platform.

  1. Open a terminal window and type the following command:
    apt-get install puppet puppetmaster facter rubygems
  2. Next, install the puppet-module gem. We’ll need this in order to pull the WordPress module from the Forge and install it.
    gem install puppet-module
  3. Switch to your Puppet module directory. This is where you’ll run the puppet-module install command.
    cd /etc/puppet/modules
  4. Choosing the right module can be tricky. Usually, multiple modules are available that seem to do the same thing, but some are minimal and others are more fully featured (and sometimes a lightweight, minimal module is what you want).

    In our case, we needed a module that would allow us to customize the WordPress MySQL database (so user name and password could be configured without manual intervention). Unfortunately, there isn’t currently a way to determine what functionality modules expose without downloading and experimenting with them. After some trial and error, we discovered a module that worked for our purposes—and we got there by a simple search of “wordpress” at forge.puppetlabs.com.

    The WordPress module written by Jon Hadfield (jonhadfield/wordpress) is a good, functional module to use for setting up the blog. Switch back to your terminal window and type the following command:

    puppet-module install jonhadfield/wordpress
  5. Edit /etc/puppet/manifests/site.pp with your favorite editor and add the following lines, where `hostname` is output of hostname on your system and `domain.com` is the suffix for fully qualified domain names on your network:
    node '`hostname`.`domain.com`' {
        include wordpress
    }
  6. Up to this point, you’ve installed Puppet on your system, used puppet-module to download and extract the WordPress module, and configured your site.pp such that Puppet will manage WordPress on your system. Now, do a Puppet run to kick off the WordPress install:
    puppet agent --test
  7. Go to http://hostname:80 and enter the login credentials for the admin account. This will populate the WordPress database with whatever credentials you used.
  8. Okay, so, say you want to have future WordPress installations configured with this password/email combo by default. One approach is to dump your WordPress database to the template used by the WordPress module:
    mysqldump wordpress >> wordpress/templates/create_wordpress_db.erb
  9. You’ll need to insert one line for this to work properly, so edit create_wordpress_db.erb and insert the following line right after CREATE <%= db_name %>:
    USE <%= db_name %>;
  10. Now, test this template by dropping the current database and doing another Puppet agent run. First, drop the existing database:
    mysql -u root -e 'drop database wordpress;'
  11. Then, do an agent run:

    puppet agent --test

That’s it! You’ve got a running WordPress blog!

Interaction with Puppet and its related tools should be a seamless and enjoyable experience–no matter what you’re managing or how complicated the task. We used open-source Puppet to complete this task, but you can easily do the same with our enterprise software. Get the free download at http://info.puppetlabs.com/download-pe2.html.

Additional Resources

What is User Experience in Puppet?

Posted on
By
Randall Hansen
in
Blog, Community, User Experience, Users
Responses
1 Comment »

Since starting at Puppet Labs four months ago, many friends have asked me why. “Puppet is a systems tool, right? Isn’t it all command line? Where’s the user experience? Don’t you usually work on the web? Are you designing their website?”

To the contrary, I’m happy to say that for the first time since the Internet was invented I’m working at a company whose web site doesn’t need much of my attention. We have fantastic people working on it already, and I think it’s quite good.

There’s a lot of user experience in Puppet if you look. That will be an easier argument to make if we have a good idea of what user experience is.

What is User Experience?

Back in the day, much of this was called Human Computer Interaction, or HCI. It is the theory and practice of how people interact with computers. Computers at the time were slow-moving and without much rich user interaction, and this started as academic work—a meeting point between psychology and computer science.

As we got faster at building software and interaction became richer, we began to apply HCI principles to one-off projects. “How can this corporate or consulting project succeed?” was the question. Usability became well-established as a discipline and method.

With the Internet, richer interaction is possible not just with a product but with a company. Perception of the company matters, including installing and using the product, filing bugs and receiving responses, updating software, finding and reading documentation, and interacting with the community. The path of the customer through this process is user experience.

So wait, is this just tarted-up brand psychology? No, because the heart of user experience is a deep interaction with software, and the user’s need to get something done.

The desire for, and techniques of, measuring much of this come from usability. How many people succeeded or failed? How many were frustrated, how many had positive or negative impressions of the product?

These metrics are all useful, but mine is simpler: Joy. My metric is joy.

I want people to look forward to using Puppet. I want people to enjoy using Puppet not because it has no bugs or prevents mistakes, but because it has a personality. A good tool is something you can relate to because you understand how and why it works. Enabling that emotional connection and building a framework around it is what I call user experience.

Is that ambitious? Absolutely, but good goals always should be.

What is User Experience at Puppet?

Certainly a lot of the work in Puppet is done by one computer talking to another, but all of that work is initiated and mediated by a human being. Without a human operator Puppet has nothing to do, and every interaction with each component of Puppet is user experience.

The Command Line

My first answer to my friends about working at Puppet is that for 25 years I’ve been a victim of bad command line tools and now it’s payback time. It’s been a great pleasure over the last few months to help create a first-class command line experience.

The command line is different from the GUI in fundamental ways. There’s very little context, no affordances, and interaction mostly relies on memory and low-density text display. Interaction principles are the same, though, and a successful user experience has the same properties regardless of the interface used to accomplish it.

For instance, we should be careful and deliberate about presenting help on the command line. We can’t use the GUI trick of contextual help; most help must be asked for explicitly. How do we tell our users that help is available? How much detail do we show at once? We’ve thought about this a lot for our new Faces commands.

The GUI

The graphical user interface is what most people think about when they hear “user experience” or “interface design.” Puppet’s GUIs today are the Forge and Dashboard.

The Forge is a place where Puppet users can find and share Puppet modules. It keeps accumulating useful modules, but has not seen much development from us in the last year. We have big plans, and will be talking about those soon in public.

Dashboard is a reporting tool and external node classifier. Its reporting features have improved, and we expect to ship version 1.2 in the near future with improved summary reporting and useful at-a-glance views of your nodes.

The DSL, or Puppet Language

Puppet’s DSL, also called the Puppet Language, is how Puppet users model the desired state of their systems. For example, this is the clearest and most compact way we’ve come up with for defining the properties we care about for one file:

    file { '/var/log/syslog':
      ensure => present,
      mode   => '0644',
    }

There are many user experience considerations here. This looks a little like Ruby code, but in fact it isn’t. Is the potential confusion to a new user worth the other benefits? What are those benefits and how do we weigh them?

For another example, there’s ticket #7599, discussing whether the trailing commas after “present” and “0644″ should be mandatory. Technical considerations aside, what would be the effect of making these optional, or even of prohibiting their use? Given that they are now required, would there be a migration costs for existing users? Would it be worth it?

The External API

An API is a structured way of issuing commands to a remote server and receiving responses. It’s a common way for web-based (and other) applications to communicate with each other. REST is one way of defining an API. Many Puppet commands are addressable via API.

Most user experience concerns here concern consistency and documentation. If a DELETE command works in one context it should work in another. Documentation should be clear and easy to access.

Not all of Puppet has an API, and not all of the APIs are as good as we would like. This is important to us and we will continue to improve.

The Internal API

The Internal API is a way of using Ruby both to define resources and to interact with Puppet internals. We have good documentation about how to define resources with the Ruby API. Our own Daniel Pittman has been writing a
series
of
posts
about our new Faces API and how to interact with it. These are a great introduction to manipulating Puppet’s internals.

The Future

It’s a mistake to think of this work as magic or guru-driven design. In fact its most important component is connection with the real users of our products. Puppet Camp was fantastic for this; our upcoming PuppetConf (watch for more information Monday) will be another great opportunity. We’re also starting more robust in-house usability testing for new work.

Next up in this space: What is user experience on the CLI? This will be a detailed look at user interaction on the command line, and extraction of useful principles to inform our work.