Crafting a design system for higher education

As a front-end developer at a University, I can see first hand why design systems can be such an integral part of an organization’s communication (and marketing) strategy. This post aims to explain the reasons why large organizations, including higher education, can benefit from having a robust design system in place.

What process is like before a design system

At the University I work at, there are talented designers spread all over campus working for various departments. The offices and departments that are fortunate enough to have a designer working for them utilize their designer’s talents to make flyers, PDFs, and web sites. These designers all have their own style, their own tone, and their own voice. Certain departments use Arial and Helvetica for their typography on print pieces while other departments use Whitney and Sentinel.

It doesn’t take a branding expert to see why this is problematic. All parts of the communications and marketing stakeholders need to be rowing in the same direction in regards to branding.

For most other offices and departments, there are no designers on staff. This means that someone who isn’t necessarily trained in web or design is now responsible for the office’s web site or flyer design. Often times there aren’t enough tools available for this person to create a nice web site and what ends up happening in some cases is that it becomes easier to create a Word document or InDesign file and put a link to that on their site. Or content is simply copied on to the website from a Word document.

I don’t blame offices and departments around campus for doing the best they can with the limited resources they have, but there’s got to be a better way…

Hypothesis: a design system can empower existing designers and lower the barrier for non-technical web editors

It’s often easier to blame your web editors or departments for being difficult to work with or not technically capable. In higher ed, we seem to think we’re a little special. We think we have such a unique situation that no industry solutions could possibly work. Often times this leads to a web team trying to support all their institution’s web sites and all the sites look a little different and are structured a little differently. This leads to an apathetic web team who is constantly putting out fires.

To be fair, I can understand the apathy because it can seem like a dauntingly huge problem to solve. However, this doesn’t seem like a sustainable solution for the long term. There needs to be a process, a plan, in place that allows for quickly building a branded website within the organization. It needs to be so easy that an intern, administrative assistant, or anyone really whose job isn’t web. If it doesn’t work for them, the website will fail because these are the people who are updating the website.

What if there was a way to empower existing designers in the college to all be on the same page? What if we provided tools to web editors in departments that don’t have a lot of technical literacy to make their jobs as easy as possible?


The first step to answering this question is to get your ducks in a row and build a design system.

This is what we’re attempting to discover at work and it’s a pretty fun process! To learn more about what a design system actually is, check out my post on the matter.

After a design system is in place, developers can integrate components into whatever CMS you’re using. If the developers are any good, they can also help craft editorial experiences that empowers non-technical users to create on-brand components using your CMS.

What’s the difference between style guides, pattern libraries, and design systems?

In my organization, we’re trying to implement an integrated marketing plan which will be helped along greatly by a sound design system. In order to implement this properly, a shared vocabulary needed to be created so we could be sure we were referring to the same thing. In this post I do my best to explain the terms style guides (editorial and visual), pattern libraries, and design systems.

What a design system consists of
What a design system consists of

A design system forces your organization to think about people and process before a technology solution is introduced.

I think there is a lot of confusion over what exactly a design system is. In my handy Venn diagram, I’ve included what I think a design system consists of. Note that the size of the circles don’t correspond to importance.

Principles are your organization’s foundational ideas that your editorial style guide, visual style guide, and pattern library will live by. These are the ideas that ideally should be running through your organization and be expressed in the style guides and pattern library.

For our design system, I’ve taken this area a bit further and aim to include our main governance policies for our most strategic sites and marketing assets. Most of the principles will be abstract concepts, but some specificity certainly can’t hurt and can provide the organization with a public facing place to review web policies. This is especially important for large, decentralized organizations.

Editorial style guide is exactly what it sounds like. It’s the preferred editorial style for web writing. Including things like whether to use AM/PM or a.m./p.m. when referring to time as well as agreed upon vocabulary for the institution make an editorial style guide useful. If some sites are using “dorms” and some sites are using “residence halls” to describe on-campus housing, a standard should be picked and added to the editorial style guide. Overall voice and tone is also an important piece of an editorial style guide.

Visual style guide is what most designers would call a “branding guide” back in the day. Well crafted branding guides would typically include some editorial guidelines, including voice and tone, whereas a visual style guide only focuses on the core visual pieces of an institution. Items like logo usage, colors, color combinations, typography, and spacing are pillars of a visual style guide. These are the areas of the brand that won’t often change and should be referred to often. To use Brad Frost’s analogy of the store front/workshop, this is the store front. The pattern library is the workshop.

Pattern library is where all the components that are available live. Ideally these patterns are created using the core tenets of the visual style guide such as proper spacing, typography, and colors. A pattern library is far more dynamic than the visual style guide. The web is never finished, new needs are always being created, and therefore new patterns may need to be created to serve those needs. Pattern libraries are where designers can go for inspiration and download code samples. Pattern libraries are where the rubber meets the road in your design system.

You may notice in my Venn diagram above, that I have the visual and editorial style guides overlapping with the pattern library. It is because it’s impossible to completely separate patterns from visual style and editorial style.

Your pattern library is a place where stakeholders can see the fruits of the design system in action. If there are strong editorial and visual guidelines, a pattern library can really shine and stakeholders can see components that can be used across the organization that comply with the brand.

Using your Android phone as a pet/security camera with IP Cam and Ivideon

My wife and I just got a new puppy and are crate training him. We’d love to know how he’s doing if we’re not there so I decided to look into some DIY pet-cam solutions. Using the IP webcam app for Android and Ivideon cloud streaming service, I was quickly able to get up and running with a perfect solution that allows me to check up on my pet when I’m not there.

What you’ll need

  • An Android device that can run IP webcam (free)
  • An Ivideon account (free)

Step 1: Create Ivideon account

Make an Ivideon account. Head over to and sign up. Follow the steps to create your account.

Step 2: Configure IP webcam

Download the IP webcam app to your phone. Open the app and find “Connection Settings” > Cloud streaming.

It should say “INACTIVE” at the beginning (see above). Tap this and then tap “Ivideon account” to connect to Ivideon.

After you connect to your Ivideon account, the app will present you with a message that it was successful. You may think that you’re done, but you’re not! There’s one more important step.

Step 4: Start server

The final step is to enable the server on the IP webcam app which will start broadcasting your stream to Ivideon. Scroll all the way to the bottom to find this.

Once your server has started, you can login to your Ivideon account and see your camera!

Protip: Turn off your screen to prevent hard core battery drain.

Step 5: Login to Ivideon and watch your stream!

Go to and select your camera. Now you can watch your stream!


Basic bash, node, and npm setup on Windows

I never thought this would be something I’d be writing about but it’s actually super exciting. This has been a major bane when trying to dev on my Windows machines. A lot of developer tools installation instructions walk you through some terminal commands, then the Windows people are all commenting at the bottom trying to figure out what additional steps need to be taken to make it work on Windows. This is crazy, and I’m glad Microsoft recognized this was a problem and included a bash prompt on Windows 10.

When I first installed it and launched it, I didn’t quite get it. I was in a ~ home directory but it wasn’t my Windows home directory which I kind of expected. I was in the home directory of this Ubuntu VM that has been booted to provide a bash prompt. I searched around and found that if you want to access your Windows home folder through the bash prompt, you’d have to:

cd /mnt/C/Users/<USER NAME>

Ok, now I can do an ll command there and see all my files, just as I’m used to when working with Linux and Macs. Pretty exciting!

Now, I don’t want to cd to my Windows home every time I login. To get around this, I edited my .bashrc file with an alias. The .bashrc file is in the home (~) folder of the Ubuntu VM.

alias home='cd /mnt/C/Users/jfitz/Workspace'

This sets an alias for home so anytime I want to go back to this directory I can just type “home”. It also executes so that when bash starts up I’m already in my Windows home directory.

Working with node and npm

I tried to install create-react-app via npm and got the following error.

npm ERR! Linux 3.4.0+
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install" "-g" "create-react-app"
npm ERR! node v7.4.0
npm ERR! npm  v4.0.5
npm ERR! path /usr/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access

npm ERR! Error: EACCES: permission denied, access '/usr/lib/node_modules'
npm ERR!  { Error: EACCES: permission denied, access '/usr/lib/node_modules'
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/lib/node_modules' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

Turns out, this is a permissions issue that can be easily rectified.

sudo chown -R $(whoami) ~/.npm
sudo chown -R $(whoami) /usr/lib/node_modules
sudo chown -R $(whoami) /usr/bin

The future

It would be absolutely bonkers if you could launch Windows apps from the bash terminal. So say I’m in my Workspace folder, I’d be able to open up Sublime text or PHP Storm from the bash terminal. I looked into this situation and there is an issue thread on Github. This comment is pretty promising:

The project definitely has its issues, but its very promising to see Microsoft trying to make this work. I think we’re another year or two off from having a super solid *nix development environment in Windows.

Successful web projects begin with content

If I had a nickel for every time someone jumps to design and layout in a web project meeting, I’d have about $5 (that’s a lot of nickels).

As Mike Monteiro puts it in his (excellent) book You’re My Favorite Client:

No one comes to a site because of the design. They come for the content or the service, like booking air travel. The design should encourage them to stay, offering a wonderfully easy-to-understand and even delightful way to interact with that content or service. Bad design can certainly bury good content, but you can’t design a “premium experience” and pour crap content into it with any expectation of success.

I think this is a little scary for people who design and make websites, because it demotes the importance of how a site looks.

Consider this post from SimpleBits:

This is my favorite website. I visit it almost every day. It’s not responsive. It’s not optimized for iPhone. It looks blurry on a Retina display. It doesn’t use the latest HTML5/CSS3 framework. It doesn’t have a thoughtful vertical rhythm. The fonts are nothing special. It is neither skeumorphic nor flat. It doesn’t have its own favicon. It doesn’t have a native app or Twitter or Instagram. It doesn’t use AJAX or SCRUM or node.js or Sinatra. It doesn’t have an API or an RSS feed or VC funding. It hasn’t been featured on a prominent tech blog or won an award.

It tells me the soups of the day.

Freely distributed information that’s relevant to the person reading it. That’s web design.

I’ve gotten incredibly invested in projects before and become so enamored with how I implemented a certain design pattern or how clever a design element was, only to see it met with a tepid response from users. This is typically what happen when you put the cart before the horse. The design could be incredible but if it’s not useful to the user, who cares? The user doesn’t look at your website the same way the person who made it does.

The user is looking for helpful content or a helpful service. They’re not there to look at how it was implemented or how it looks. The only people who do that are other designers and developers.

Most successful web projects start with great content. Design serves to highlight the content. So if all this is true, why do so many meetings quickly move into design?

This is something Monteiro also touches on repeatedly in his books, but we — people who design and create websites — all share some guilt for allowing this to happen. The people who move the conversation towards design before a) purpose of the site is settled and b) engaging content is developed simply don’t know that they’re trying to derail the process.

It’s our job to remind them what is important. It’s our job to prioritize content over design. Ideally, a great content strategist can work with the client and help tease out what is most important to be shown and developers can focus on building a great technical foundation.

So everyone who is reading this, go forth into your next meeting and remind people of the solid foundation that web projects should be built on: a purpose, something useful to the user, and great content to support it. Once those things are decided, the design will follow.

Thoughts on scalable, maintainable CSS

This post is heavily inspired by the article referenced in the above tweet. If you haven’t already read it, stop what you’re doing and go read it. Every once in a while you come across a post that challenges your assumptions and makes you take a step back and evaluate your process.

I know a little bit about maintaining large CSS code bases. At my current job, we have a 140 site network of Drupal 7 sites for the college. We also have a few WordPress installs and some other sites and static pages in the mix.

Maintainability is something I strive for. There are also some issues with maintaining CSS for large sites that haven’t been addressed until now.

With all the different naming conventions out there, you’d think we’d have nailed it by now. The truth is, CSS is still a mess.

Preprocessors and build tools have brought us a long way, but what if that is the wrong place to focus?

What if you could open up your text editor and build the interface you want without writing a single line of new CSS?

could open up Sublime Text and write some fancy mixins and Sass functions that really are clever and then make some new classes for my components, but why? Chances are I’ve written CSS that does all of those things already.

I’m not very interested in what I can do with css. I’m interested at this point in what I can help groups of people do with css. –mrmrs

This brings me to why I’m so interested in the concept of one class, one function.

When working with a giant network of sites with distributed authorship, you learn real quick that you can almost never come up with a solution that everyone will like. Certain groups want slight variations to components that you built. Things come up.

What if we threw a bunch of lego bricks at them and said “Here’s all the tools you need”?

Consider the following HTML:

<div class="card card--red">
<h2 class="card--headline">Headline</h2>
<p class="intro">Here is some test text</p>

Without looking at the CSS for this, can you imagine what it would look like? I’m guessing you would know it looks something like a card and maybe it has a red background? Other than that, it would be difficult to tell what is happening here. Are there any clues about fonts, padding, borders, or text styling?

Now, consider this HTML:

<div class="bg-red padding-2rem border-1px">
<h2 class="sentinel italic font-large">Headline</h2>
<p class="whitney drop-cap">Here is some test text</p>;

You’ll notice a couple differences right off the bat. There are more CSS classes, yes. But you can also get a much better idea of what the HTML will do. It is semantically clear.

Benefits of this approach include rapid interface development without having to write a line of CSS. Once you come up with all your “utility” classes, you’re free to construct your interface using classnames in HTML.

Also, it allows a broader group of people to benefit from your CSS. People who may not be comfortable with CSS can now in plain English, add classes to their markup which does one thing without having to worry about side effects.

Let me be clear: I don’t think this is a substitute for writing some abstract classes. I think there is still a need to write classnames that don’t map directly to a function (ex: .header-top, .footer, etc) but the point is that a majority of the CSS functionality will be easily exposed in the form of plain English utility classes.

I think this has the potential to help large sites with lots of CSS and lots of people who use the CSS. I’m interested in giving this a try at my organization. When I do, I will most certainly report back here with my findings.

Check out the followup to this piece.

Thing one thing I don’t understand about Google Photos

Let me be clear: Google Photos is awesome and I love using it, but as a loyal Google user, I feel a little slighted. Here’s why.

When photos were managed by Google+, they counted against your storage. I accumulated a lot of photos during this time.

Now that Google Photos is out, they are offering FREE storage (that does NOT count against your storage quota) if the photo is under 16MP.

But wait a minute, all those previously uploaded photos are still counting against my storage, even though they were imported into Google Photos and are less than 16MP.

Not a huge deal, but a little disappointing. Anyone else have this experience?