Category: Blog

  • Don’t make me think! (But please allow me to.)

    My friend Brendan visited me from New York this past weekend. Brendan is a CCT friend and so naturally we talked about “CCT stuff.” I started the Apple Music three month trial earlier that week and was telling him how amazing the curated playlists are on that service. My colleague Noah captures my feelings on the subject pretty well.

    Playlists was (is) about where the magic ended for me and eventually we covered everything we loved about Apple products like OS X, Final Cut, Aperture, and, yes, iTunes, and how all of them have declined or been killed off in the last few years. At some point Brendan said something that stuck with me. “It’s like they’re just saying: Don’t think about it! We got this.”

    At first I thought ‘but that’s the whole point! You shouldn’t have to think!’ Steve Krug literally wrote a book about interface design called “Don’t Make me Think!” But Krug never said “don’t allow your users to think.”

    Photos, the all-in-one iPhoto and Aperture replacement, is a good example to illustrate Brendan’s point. The cool thing about iPhoto was that you didn’t have to think. Photos has this neat feature where you can open an old Aperture or iPhoto library in Photos by simple double clicking or dragging the library onto the Dock icon, but then Photos makes a ton of assumptions for you. The big one: It assumes you opened it because you want to convert that library for use with Photos.

    This is fine if that’s what you want to do but it’s not. Maybe you have an iPhoto libary that’s separate from your Aperture library. Maybe you recently got married and want to merge your family’s libraries into one and you’re opening them to see what’s inside. In either of those two cases, the experience you get is:

    1. Photos fires itself up
    2. Apple tries to sell you an iCloud Photo Library
    3. It starts creating a new Photos library from your original without telling you where the new library was created, what it’s called, or giving you an opportunity to choose an alternative. (And there’s no way to cancel.)

    Lets say that original library started in 2004 and has about 70 GB of photos in it. That last step is going to take a long time and there’s nothing you can do about it. Once it completes, you might wonder:

    • Where are these photos I’m looking at?
    • Was my original Aperture library destroyed?
    • Will it still work in Aperture or iPhoto?
    • Is the new library referencing the same photos that are in the Aperture Library or did Photos create copies?
    • Is this the default library now? What if I want to open a different one?
    • If the original isn’t trashed and I open it in Photos again, will it create another new library?
    • If I open another old library, will it import those photos into the same library I just created or create new ones?

    Apple has no answers for these questions.

    iPhoto had this great feature that was common across most of Apple’s creative apps: Show in Finder. If you were trying to find the original of a photo to copy it or open it in a different app, you could ctrl + click the photo and choose “Show in Finder” and :boom: there it’d be in the Finder.

    Photos has no such option, at least not on ctrl + click.

    Photos context menu when control clicking on a photo.

    It does have an option in the File menu called “Show Referenced File in Finder” but I’ve only seen it greyed out.

    The contents of the File menu in Photos

    The “Get Info” option doesn’t give you that information either.

    The get info card in photos

    You can’t even drag the photo to the Finder icon on the Dock. Apple to Boone: “Don’t think about where the file is, man! You don’t need to worry about it. Just keep snappin’ away on your iPhone and everything will be alright.”

    The thing is, everything might not be alright. That’s why I need to know where the file is. And when you start breaking it down, MacBooks are the same way: On MacBook hardware: “Don’t worry about it, you probably want a new computer if something is broken.” Nobody literally says that to you, your computer gives you no other choice.

    The beauty of iPhoto when I first used it was that it didn’t make me think. Every other photo manager out there was complicated, janky, and tied to the camera you bought. iPhoto worked with every camera and imported your photos in intuitive ways and that was great. Most of the time that’s all I needed to do. But sometimes I needed to get my photos out of the Finder and iPhoto made that possible. Sometimes, despite all of Apple’s best intentions, I wanted, no needed to think and Apple enabled me.

    This “Don’t let them think” design movement seems to have cascaded out of the original iPhone and in the last couple years has infected OS X and even Macs. It’s a troubling trend that hopefully will spurn people against Apple enough for them to change. I want Apple Music to be great, I really do, but playlists alone won’t be enough. I want to be an Apple fan boy again, but it’s just not happening.

  • Riding the Great Washington Loop

    This weekend I did a ride that’s been tempting me since we first moved from Arlington into the District three years ago: The Great Washington Loop. Starting from Georgetown, the loop takes you up the Capital Crescent Trail into Montgomery County and then circles the District via the Georgetown Branch Trail in Bethesda, Sligo Creek trail in Silver Spring, the Northern Branch Trail near Brentwood, and finally the Metropolital Branch Trail back into the District. Clocking in at more than 30 miles. It is an epic ride, to be sure.

    The good

    These trails are some of the best maintained, least-congested bike infrastructure in the area. When there’s pavement it’s smooth if not fresh, usually wide enough to ride abreast with room to adjust if someone tries to pass, and not overcrowded. Unlike the Rock Creek Park Trails there’s typically room to pass walkers and runners without slamming on your breaks, and there’s almost always space for them to run or walk off the pavement if necessary.

    No steel plates were encountered during the duration of the ride.

    About 90% of the ride is on some kind of trail if not always paved. The on-street segments are for the most part easy (though, see The bad for a big caveat) and where you’re required to cross large highways you are given a crosswalk and flashing lights to help cars see and stop for you.

    The Georgetown Branch Trail remains unpaved, for the most part it’s not a problem but you can’t ride it with pizza cutter tires and watch out for erosion. The bridge crossing over rock creek and the old railroad bridge you cross right before joining the road are breathtaking views.

    The meh

    Inconsistent signage across the various trails was a bit difficult. For example, the Georgetown Branch does not simply connect to Sligo Creek Trail (at least not obviously). After the separated trail ends, the signage for Georgetown Branch takes you on back streets and eventually through the middle of downtown Silver Spring. The best way to connect to Sligo Creek is to break with the signed trail and either ride with traffic on Colesville Rd. for a few miles or take back roads occasionally crossing 16th St. Georgia Ave, and riding briefly on Colesville Rd. The closest trailhead we could find was off Colesville Rd. and Sligo Creek Parkway just past Dale Dr.

    In short, this is not a loop like Minneapolis’s “Grand Rounds” but the trail connections are manageable and, for the most part, don’t get in the way of enjoying the ride.

    The bad

    Signage, or lack thereof, made the ride most difficult. It’s a problem compounded by the fact that the turn-by-turn guidance on Bike Washington is sorely out of date and difficult to read on a phone. It should really be replaced by a really clear Strava route or a mobile-friendly layout. But it also needs to be updated as we missed every trail connection after the CCT–Georgetown Branch linkup in Bethesda.

    This isn’t a knock on Bike Washington. They’re a volunteer organization and keeping that page up to date is probably a low priority given all the other priorities for bike advocacy in this region. If you’re going to attempt this trail, I recommend combining their directions with a Strava route or riding with someone who has done it before.

    The worst of our mixups came at the end of the ride. Sligo Creek Trail takes you pretty far east into Prince George’s County without going very far south back toward the District. Around the West Hyattsville Metro station Sligo Creek Trail becomes the Northwest Branch Trail (the directions say to watch for a “basketball court”, there are at least four of them before the split). The part of the directions for getting from that trail to the Metro Branch tell you the “trail will end” and to take an “unpaved street” around a building to connect to 37th St. Either the trails were less developed when the directions were last updated or we were simply enjoying the ride too much.

    Comparing the route we ended up taking with the directions from Bike Washington we probably went a few miles off course and ended up riding Rhode Island Ave. into the District and joined Metro Branch at 4th and S NE. We could have joined earlier, but by the time we realized we had gone off route we were too tired to “figure it out” and stuck with what we knew.

    Recommendations and our route

    The normal route has you take Metro Branch down to the mall and loop back to start off of the trails around the mall and the river. We were at 34.5 of 30 miles when we got to Union Station. Our Strava Map is below. If you follow it, I’d encourage remixing it a bit to avoid riding on Rhode island at all. I’d espcially recommend turning off Rhode Isand Ave. at Monroe St. NE into Brookland to meet up with the Metro Branch trail in Brookland. I suspect Taking Queen’s Chapel Road off the Northwest Branch trail and following Michgan Ave. Down to Catholic University is also a better option.

    For folks who want a longer ride, the Northwest Branch Trail is outstanding, low traffic, and might loop around to meet the Anacostia River Walk trail. I’m not sure, but it’s worth exploring.

    All told we rode 34.5 miles, three of which was each of us getting to the trail from our homes. If I were to do it again, I’d probably start at Union Station and run the loop in reverse. Attempting to figure out how to connect into the Northwest Branch trail at the beginning when I’m feeling more adventurous, instead of at mile 27, would probably make the rest of the ride more enjoyable.

    Here’s the full map:

  • Work from Wisconsin part two, St. Germain

    For many people I knew growing up in Minnesota there was some notion of “up north.” For some people it was camp, others a friend’s or family’s cabin, and others yet it was a relative who lived “up north.” For me it was all of those at one point or another. Up north was a place to go when you needed to get out of the hot city and get in touch with wilderness. This year I went north to work remotely after visiting Wisconsin for a friend’s wedding. The location: St. Germain, Wisconsin. A town of about 1200 people, St. Germain is actually closer to Michigan’s Upper Peninsula than most of the rest of Wisconsin, and slightly closer to Duluth, MN and Superior, WI than any other major cities (it’s still 170 miles from Superior). If this isn’t the definition of remote, it’s close.

    Big Saint Germain Lake, Saint Germain, Wisc.

    Given the demographics, I’m going to guess few other federal employees are working out of this part of Wisconsin. Maybe a Forestry Service employee or two to manage the national forests in the area and a handfull staff the Apostle Islands, and of course the postal service, but not much else. It was certainly a change from the density of federal employees back in D.C. So why do it?

    This country is beautiful. I’ve not visited all 50 states (yet) but the biodiversity across this country is incredible and Wisconsin is no exception. The trip from Madison north on highway 51 takes you through prairie land, lake country, and even a couple (short) mountains carved out by ancient glacial rivers. The area around St. Germain sometimes feels like it has more lakes people, but every one we met was a constant reminder of the importance of the work we’re doing in the GSA and the federal government. And yet the majesty of the wilderness surrounding me felt very humbling.

    Common loons swimming on Big Saint Germain Lake

    Even though Sue, a bartender we met this week, might not interact with the federal government very often our work has value for her if only indirectly. If the tools we build to make federal procurement easier leads to better highway contracts from the Department of Transportation, then we help Sue get to work on time. If the Forestry Service comes up with an innovation to stop the spread of emerald ash borer, the whole community benefits from healthier trees. It’s this connection that makes working for the GSA a pretty incredible experience. One I hope we can start to tell better.

    Our work doesn’t have to be big to be great. It doesn’t have to touch every American’s life to shape communities like St. Germain for the better. It only has to be done and done well.

    Common loons swimming on Big Saint Germain Lake

  • Work from Wisconsin part one: Madison

    One thing that’s really incredible about working for 18F is our ability to telework from just about anywhere. Everything we do is online and everyone we work with is in one of about six different places so even when we’re not teleworking, we’re teleworking.

    Being telework-able also means when we have to leave our home base and visit family instead of taking vacation or going on leave, we can keep working, which is just totally wild. So for the last two and a half days of this week I’ve found myself in Madison, WI, a virant city of about 250,000 that’s home to Badgers, Mallards, and four stunning lakes.

    Day one: JPH, 100state, and Rain

    I didn’t expect the rain. I probably should have but I didn’t and ended up in the middle of the rainstorm after an excellent breakfast at Johnson Public House on E. Johnson Street. The barista there described the coffee he served me as a punch in the face. He was not wrong but, paired with a breakfast sandwich, it was exactly what I needed to get going in the morning.

    Burnies Rock Shop as seen from JPH

    After working a couple hours there I decided to drop in on 100state, a non-profit co-working space right off of Capitol Square. If you’ve never been to Madison, Capitol Square is pretty wonderful. Like DC, Madison has a height restriction, only the one here is more explicit about the buildings being shorter than the capitol. It’s also on one of the highest spots in the city so no matter where you are, you can probably catch a glimpse if you orient yourself correctly.

    Emanating from the capitol is a system of four annular streets that fill in the isthmus between lakes Monona and Mendota. From the center leading directly west to the University is State Street, a pedestrian and public transit only zone. Right off the square, sharing a building with Wisconsin’s Secretary of State, is a small, non-profit co-working spot called 100state.

    Though I’ve only once been to UberOffices in DC, I’d be surprised if other co-working spaces were much different from the sterile, silent, sparse environment that cost anywhere from $40-$75 per month for a eight hours at a table with Internet. 100state’s small staff described themselves as being a “member driven” non-profit that recouped its operating costs through usage fees that make their more expensive, commercial counterparts look like scams.

    The inimitable Mickey's

    Lunch at Ian’s Pizza because of course. Chicken burrito pizza, 1 slice; wish I had seen they had Sprechers in the fountain, guess there’s always tomorrow.

    The day rounded out with a trip to Willy Street for a haircut and a burger at the inimitable Mickey’s Tavern. Even in the rain Madison is a warm place. Wish I had more time to engage with the civic tech community at Hacking Madison and learn more about what people are shipping in the Badger State.

  • 2014 Capital Bikeshare Data

    The red Capital Bikeshare bike

    I stumbled upon a fascinating article on Chart-It this week about Capital Bikeshare’s 2014 data. Bikeshare makes its data available and Chart-It did a wonderful job of breaking down ridership and bike usage for the year 2014. Some highlights:

    1. Nearly 80% of rides are made by “registered members,” that is someone who is paying the monthly rate, not a tourist or “casual rider.”
    2. Registered members, despite taking more rides, take rides that are, “on average, 61% shorter” than casual riders. The average ride for a casual rider lasts 38.2 minutes with a wide standard deviation of nearly 51 minutes.
    3. 3% of rides taken by registered members last longer than the free 30 minutes.
    4. The longest rides lasted nearly an entire day and cost the user “around $100”
    5. 2.9 million rides were taken last year over 50 million minutes. “That’s about 90 years of bike rides.”

    On the bikes:

    1. There were more than 3,000 bikes in operation during 2014
    2. Of those about half of them were active throughout the whole year.
    3. Some bikes work much harder than the rest: “the busiest 15% of bikes carried out about 72+% more rides,” over “more than 159 hours.”

    2014’s hardest working bike was a beast, but you’ll have to read about it yourself.

    What’s more interesting than simply the numbers is what they tell us, or could tell us, about the city. What can we say about the fact that the hardest working bike finds itself most often at the most frequented stations? What can we say about how people get around our city if bike rides among people who live here last less than 30 minutes? Does that mean it’s possible to get everywhere in less than 30, or does it mean local riders are clever enough to return their bikes before they have to start paying more for the ride?

    It will be fascinating to see Chart-It’s follow on posts about stations and routes and tends over the last four years of Bikeshare.

  • GitHub for Mac: A Usability Review

    Update: This post is out of date. The new GitHub Desktop App has major improvements to many of the usability problems addressed here. The GitHub For Mac app described below is no longer distributed.

    Since first learning how to use Git a couple years ago I’ve been pretty convinced that using the command line is the only way to go. Partly it’s simplifying my workflow: On a given day I have Terminal open for running tests, working with Jekyll, and quick editing in vim; a browser open to work with GitHub, inspect my work, and debug things; plus a text editor for All the Things. A Git client is one more application running that I have to integrate into a three screen, multiple tab workflow.

    I tried GitHub for Mac a few years ago when I was first learning Git. I thought I’d be able to focus on the code without worrying about the version control part of my job. I don’t remember why I went command line only, but I think it had something to do with my first pull request at CFPB: one that had every file in the repo committed as “changed” because at some point I had changed permissions on the whole repo but forgot to tell Git to ignore that crap. OOPS!

    Being a full-time developer working with primarily with other developers for a year-and-a-half is a good way to forget what you didn’t know before you started. So I dusted off the ol’ GitHub for Mac app, and decided to evaluate it again. I work with a few people who are where I was two years ago and I am trying to make a conscious effort to check assumptions about what is “obvious” or “easier.”

    GitHub for Mac

    The flagship desktop app made by GitHub for folks who use the company’s web service, this app has the huge advantage of being free and integrated with your GitHub account. One of the first things you have to do with GH for Mac is sign in to your GitHub account and it automatically creates and pairs an SSH key with your Mac (or uses an existing one). This Git Client changes around some terminology that might be familiar to Git power users. The biggest change is the “Sync” feature that both pulls down local changes and pushes your changes.

    The GitHub for Mac interface with the Sync button highlighted

    The main view on the application is essentially a visual representation of git status. Each changed file fills in as they are modified with a checkbox. Checking the box (done by default) presumably runs git add on the file, and at the botton of the center column is the “Commit and Sync” button. When pressed, this button makes a commit locally and immediately pushes the branch to the remote whence it was cloned. If you don’t enter a commit message, the button triggers an alert asking you to include one.

    To the right of this center column is a live diff. Your local changes against what was already there.

    A git diff view of GitHub for Mac

    You can unstage a file (git reset HEAD <file>) by simply unchecking the box. This will keep it from being committed when you “Commit and Sync.”

    Once you commit there’s an undo button to roll back your changes.

    An undo button! We've all wanted one of those at one point or another.

    You can even make a pull request right from the app. And it will even tell you if there aren’t any commits to merge.

    Immediately there are a few things to love about this interface. Issuing pull requests without going to GitHub.com is a dream. It’s like click, clack-clack-clack, click and :boom: pull request.

    The visual diff is also handy and maybe a new feature from when I first used the app a couple years ago. It certainly makes you wonder what has changed if the diff looks empty.

    GitHub for Mac, like any GUI, is a graphical overlay applied on top of an otherwise complex system. To that end, Nielsen’s Heuristics can be a good way of evaluating the design. Those heuristics are:

    1. Visibility of system status
    2. Match between system and the real world
    3. User control and freedom
    4. Consistency and standards
    5. Error prevention
    6. Recognition rather than recall
    7. Flexibility and efficiency of use
    8. Aesthetic and minimalist design
    9. Help users recognize, diagnose, and recover from errors
    10. Help and documentation

    Git is already pretty terrible at a few of these, particularly numbers 2, 4, 5, 6, and 9. But it nails a few, including 1, 3, 7, and 10. The question at hand, though, is how does GitHub for Mac do?

    Visibility of System Status

    GitHub for Mac comes out pretty well here, though it could do better. Many complicated workflows are compressed into a single button press and when this works well it really works. The main view, for example shows git status and git diff live. It also lets you toggle to other views like “History” and “Branches.” That makes the non-exclusive list of Git commands you can accomplish within one click of opening the app:

    1. git add
    2. git commit
    3. git push
    4. git pull
    5. git branch
    6. git status
    7. git reset HEAD <file>
    8. git log
    9. git branch
    10. git checkout <branch>
    11. git checkout -b <new-branch>

    These commands are packaged up into buttons like “commit and sync” that encompasses a multi-step workflow. At its simplest it looks like this:

    git pull origin master
    git commit
    git push origin master
    

    Masking those parts of the system comes at the expense of the user knowing what all is happening when that button is clicked. This was most painfully obvious when pre-commit hooks were introduced to my workflow.

    Hooks, in Git, are small programs that run at different stages in the workflow. If you’re curious I recommend reading up on them in the Git Book. One common place for a commit hook to run is “pre-commit” to stop developers from committing things like passwords, or easily detectable security problems. I wrote one to optimize images in a specific folder. GitHub for Mac still runs the hooks at the appropriate times, it just does so invisibly. Instead of showing the action, it looks like the application is hanging.

    By abstracting git add actions into checkboxes, the app conceals a lot of the work that Git does to track and record changes. But maybe that’s a good thing. It took me a while before I realized you had to run git add again if I changed a file after I did it the first time but before I committed. As a beginner, I thought I should only have to do it once. With GitHub for Mac that expectation is true. The box is already checked, and the app re-adds the file to the commit for you, this leads well into the second heuristic.

    Match Between System and the Real World

    Git has a lot of bad idioms. The command git commit feels a lot like the “save” command in any other application but what most beginners don’t learn is that git add is closer to save. Running commit is more like finishing a draft while git add is like every command-s you issue while you’re writing.

    It is also quite difficult to explain the three “states” a file can be in when working in a git project to those who have no experience with it. What do the terms ‘tracked’ and ‘untracked’ mean to somebody who has only worked with Microsoft Word? What if something is Staged for Commit? How is being “tracked” different from being “staged?” GitHub for Mac answers these questions by saying it doesn’t really matter and then mapping the concepts of Git onto the metaphors we already have for working with computers. Persistently re-adding the file for you? That’s autosave. “Commit and sync,” that’s finishing a draft and backing it up to Dropbox.

    There are a few times this falls down. For example, what does this mean?

    WTF does the partially checked box mean? My autosaves!

    Command line Git would have an answer with git status. It’s a little harder to tell at a glance what is happening in GitHub for Mac.

    In addition, you’re rarely working on a Git project and not using another application. It would be great if GitHub for Mac were better integrated with a text editor or the file system. The app shows you which files were changed, but it’s not clear from just looking at the app what you’re supposed to do with that information other than “sync and commit.” It’s hard to even figure out where the repo is, what other files are in it, and how to go about making more changes without the assist of another app. It turns out that right (or control, or two-finger, or force) clicking on the name of the repo will give you options including “Open in Finder” and “Open in Atom.” It’s unclear what happens if you don’t have Atom installed.

    I’m not sure how many people would intuitively right click on the name of the repo in order to edit one of the files and would expect, instead, someone unfamiliar with GitHub would probably ask “what do I do now?” when they see the empty “Changes” tab. Since GitHub makes Atom, I suppose we can hope that future versions of GitHub for Mac will integrate some basic file editing features from Atom. In the meantime, I expect people unfamiliar with GitHub will remain confused about what they’re supposed to do with this app other than “Commit and Sync.” More cues about how to find and edit files in the repo would help.

    User Control and Freedom

    Command line Git has this down and GitHub for Mac takes a lot of freedoms away by abstracting them into buttons (as discussed above). There are so many different workflows available to Git users, and for each one there is a camp of people who firmly, militantly believe they are doing it the right way. Rebasing vs. merging, forks vs. branches, when to branch vs. pushing to master, how frequently you should commit: these are all examples of different basic workflows that power users can expend a lot of hot air arguing about. (Guilty.)

    GitHub for Mac resolves a lot of those issues by setting some smart defaults and removing some options. You can’t squash commits in the app (at least not easily). You can’t fetch from your remote without also merging in the latest changes. You can’t rebase, instead of merging, one branch into another. You can’t commit without also pushing your branch.

    For those of us weaned on CLI Git this is an inexcusable restriction on our freedom and control over our projects. For others it is the enforcement of standards in an otherwise anarchical world.

    Consistency and Standards

    GitHub for Mac nails it. Where there might be multiple ways to accomplish a task from the command line, there is either one way to do it, or it is impossible from the app. This, I imagine, is a huge win for people new to Git. Unless, of course, the standards the app tries to enforce are different from the ones your team is using. There are a lot of ways to encourage patterns on top of Git, (aliases, hooks, good training) few of them are available in GitHub for Mac.

    Some of the standards it enforces are huge improvements over conventional wisdom given to newcomers. Committing in the app, for example, requires and nudges users toward more informative commit messages. Let’s be honest and admit that someone who is new to Git and the command line probably isn’t very familiar with command line editors and crazy looking commands. To solve that, or maybe to simplify the process, many Git tutorials recommend the shorthand git commit -m 'message'. This would be fine if that shorthand didn’t often lead to unhelpful messages like “fixed stuff”. (Again, guilty.)

    A message like that is fine if the “stuff” is one change to one line of code but GitHub is collaborative, and commit messages should help your collaborators understand what changes you made. GitHub for Mac helps newcomers get past -m by providing “Summary” and “description” sections in the commit view. It’d be interesting to see data around whether GitHub app users provide more useful commit messages because of this nudge.

    GitHub for Mac will not let you commit without a commit message and encourages a summary and description in each message

    Flexibility and Efficiency of Use

    This, again, is a mixed bag for the app. CLI Git is full of flexibility, as mentioned in the user control and freedom section, there are many different ways of accomplishing the same task in Git. To get the latest changes on GitHub.com, for example, your workflow might be as simple as:

    git pull
    

    Unless you’re working in a branch then it might be:

    git checkout master
    git pull
    git checkout <your-branch>
    git merge master
    

    And if you’re on a fork it might be

    git checkout master
    git pull origin master
    git push fork master
    git checkout <your-branch>
    git merge master
    git push fork <your-branch> # (arguably optional)
    

    And if you’re into rebasing instead of merging it’s a whole other can of worms.

    Getting that kind of flexibility is maybe possible in GitHub for Mac, but obviated by default behaviors.

    Finally, it’s worth mentioning here the ease of integration with GitHub’s web service. Issuing pull requests with the click of a button is a dream.

    Issuing a pull request without going to GitHub.com

    But the efficiency of issuing that pull request is halted by not being able to comment on or further interact with pull requests and issues without going to GitHub.com in your browser.

    Aesthetic and minimalist design

    This criterion has been touched on by others above, but the look and simplicity of the app cannot be ignored. I mentioned in the visibility of system status section that there are at least 11 git commands executable within one click of launching the app. In addition, the app abstracts away many of the more complicated commands into their most useful presentation. The “History” button takes you to a view that represents git log --date=relative with a git diff of that commit next in the opposite frame. You can even expand each commit and jump through the diff file by file.

    The branch view defaults to git branch -v alongside a “Published” button, which, when disabled means you have pushed all possible changes.

    All of this happens in relatively few clicks compared to how many commands and defaults you would need to have this kind of view in even the most sophisticated of command line set ups. These design choices give you the most valuable information about each commit formatted and displayed accessibly.

    A couple things are confusing in this setup.

    Moving the mouse to the left side of a branch turns the cursor into a hand and you can click and drag the branch. What exactly happens when you drag one on top of another is not intuitive. Are you switching branches? Merging one into the other? The answer is unclear without either giving it a shot and hoping you don’t make a mistake (see below) or looking it up.

    There’s also a star button on the right side of a branch’s container. What this does is completely unclear. Clicking a star of an inactive branch appears to checkout or, “switch to,” in the language of the app, that branch. In fact, clicking on anything on an inactive branch appears to activate it, not just the “Switch to this Branch” item in the list that drops down from the “arrow down” button.

    Finally, you can “unpublish” a branch. As an experienced git user this doesn’t mean much to me. Does it mean somehow reverting the remote branch back to the last previous push? Or, more likely, does it mean completely deleting the branch from the remote? It turns out it’s the latter, and any collaborators working on that branch will need to find another way of getting any updates since their last “sync.” To be fair, the app warns you about this when you attempt to unpublish.

    The unpublish button warns you that your branch will be deleted from the remote repository.

    Help users recognize, diagnose, and recover from errors

    The “unpublish” feature is a good example of how GitHub for Mac fails to help users prevent and troubleshoot errors. If you’re a collaborator on a project and need to “revert” some changes you pushed to a branch, you might think “unpublishing” is your tool: and you would be wrong and the app gives you no indication of how to accomplish this. (To be fair, Git makes this intentionally difficult.)

    Additionally, the warning message is inaccurate. An “unpublished” branch can be “republished” by pushing it back again. Maybe GitHub for Mac doesn’t let you do this, but in theory it is possible, just not by hitting Undo.

    It is good that the warning is there, though. If multiple individuals are working off the same branch, revoking that branch is potentially confusing if not dangerous. And if you are new to Git, you might not know that “the remote repository” means GitHub.com and that by “unpublishing” you’ve just prevented your collaborators from accessing your work.

    On another topic of branching and merging, GitHub for Mac might have made switching branches too easy. An accidental click on the Branches view might inadvertently cause you to commit to the wrong branch before switching back. Depending on the project, this could result in wild instability. At 18f, for example, accidental commits to staging will result in republication of our staging site – a complete obfuscation of our publishing process and contribution guidelines.

    This is not to say that accidental commits to a branch can’t happen in command line git, but the GitHub for Mac app doesn’t make it easy to see errors as they occur and understand how to recover from them. The command line forces you to be more explicit by requiring you tell it exactly what branch you want, and what you want to do with it.

    As far as diagnosing and recovering from errors, the app doesn’t help much with that either. In the above example, you would at no point get any indication you were making a mistake, how you got there in the first place, or what to do to fix it. If you committed and synced a load of changes to branch-a and another collaborator asked you to submit them to branch-b instead, you might know what that means, but you might not know how to solve it other than checking out a new branch and copying and pasting your final changes over manually. If you’re working with several files this could take a long time.

    Help and documentation

    In that last example, the easiest way to get out of that jam would be to merge or, better, rebase your branch-a onto branch-b like git rebase branch-a branch-b and then pushing up branch-b. If you only need some of the commits from branch-a you can do an interactive merge or, what I do, use git cherry-pick to extract the specific commits or range of commits from branch-a that are needed in branch-b.

    Git is an incredibly well documented piece of software through guides like ProGit, tutorials from GitHub and Atlassian, and, shameless plug, 18F’s tutorial. There are separate man pages for Git and each subcommand (from the CLI, run man git-commit). And there are millions of Git users around the world answering questions on StackExchange ready for you to find by Googling your problem. If you’re at a software company, there’s a good chance someone on your team can help, too.

    Little of that will be helpful on GitHub for Mac. The top search result for our merging problem above is to rebase --onto and the other top-voted answers recommend cherry-picking. If you’re using GitHub for Mac without knowing how to Git from the command line, what are you supposed to do?

    Conclusion

    GitHub for Mac is definitely a well-designed step in the right direction. For those new to Git or only working with repositories occasionally, it may be very useful and certainly an easier learning curve than learning how to use the command line and all of Git’s complexities.

    It has a lot of room to grow, though. An app like GitHub for Mac could be a stand in for a user interface for static sites if it had built-in text editor and visualization of the repository’s tree. Or it could compete with a program like Tower if it offered more flexibility of use and workflow that a power Git user would want and a more exhaustive GitHub integration. At the moment, it feels like the app is struggling to figure out what it should be.

    I work with a few people who had never used Git, the command line, or a static site generator before. Right now we’re trying to start people off at the command line and offer help as needed. We do this, in part, to standardize the way we work, but also because we think eventually all of us will encounter some kind of error GitHub for Mac won’t be able to solve and a more experienced Git user will have to intervene anyway.

    Our hypothesis is that learning the command line from the start will help people feel more comfortable making mistakes and recovering from them. That means introducing people to a pretty steep learning curve. A lot of people believe the promise of a GUI is that it will reduce the learning curve. In this case, I’m not sure that’s true, at least not yet.

    Comment on this post at GitHub.com

  • 30DaysOfBiking: Five years later

    Five years ago a small group of cyclists in Minneapolis got together a great idea: Ride a bike every day for the month of April. They called it 30 Days of Biking. I was in Korea at the time, riding my bike around the city of Ilsan, sometimes going as far as Paju near the Third Tunnel of Agression. Back then we had the luxury of not having to work until after noon so going for a long ride every morning was pretty easy and didn’t require waking up early.

    I’ve been thinking a lot about bike infrastructure lately. It’s a subject where I’m increasingly of the mind that we should be building cities that allow safe and convenient travel for anybody, no matter how they’re traveling, but what often happens is that city planning ends up sort of shimming bikes into the grid in the way that’s least intrusive on people driving cars.

    Bike lanes are a great example of this. Bike lanes are perfect for going straight or only turning right onto other bike lanes. Turning left? Good luck crossing out of the bike lane and however many lanes are between it and the left turn lane. Hit a stop light? There’s probably a car (let’s be honest, they’re mostly from Maryland) taking up most of its lane and the bike lane attempting to turn right. Even going straight can be difficult when cars slide over and use the bike lane as an idling lane. I can’t count how many near misses I’ve had with taxis swooping in to rescue a stranded commuter on 17th street. And when it happens, the biker now has to merge with the traffic of dozens of drivers white-knuckled on their steering wheel, silently (or often loudly) screaming “Just Use the Fucking Bike Lane!”

    Especially in the dense, downtown corridors of cities, there’s no need to drive unless you’re entering or leaving. I know of nobody who drives to get their lunch, for example, in DC. That would be insane; you walk to get lunch or bring it from home. This is also why we have the Metro and giant “Kiss and Ride” lots in the suburbs for folks who commute from The Faraway Places with names like “Loudon” and “Fauquier.” Even the nearby places like Takoma Park have these lots.

    Instead of getting a city optimized for the people who use its pathways most efficiently, we have cities optimized for nothing, and dangerous for everyone not in a car. Cars are really good at getting in and out of cities, bikes and feet are really good at getting around them.

  • It’s Not You, It’s Me: Why I Probably Wont Go To Your Happy Hour

    We have an unofficial tradition at work (at the DC office) of going for an office-wide happy hour on a new hire’s first day. There is also usually a happy hour when someone from another office is visiting, the monthly Government Tech happy hour, and occasional impromptu happy hours. Depending on conditions, that can be as few as two or as many as six happy hours in a month. I like my colleagues well enough and would even like to get to know some of them outside of work, but the happy hour strikes me as a poor place to do it.

    For starters, a workplace with a social calendar filled in with events surrounding alcohol doesn’t exactly foster healthy social relationships. People say things they don’t mean when they are drinking, behave differently, and, most problematically, think that workplace conflict can be resolved over a few drinks. The first two are obvious, but the final one only caught my attention recently.

    Booze is expensive, I get that. It’s nice not to have to buy one every once in a while, but it’s merely a nice gesture when there’s unresolved resentment between the two people. Without the extra step of apology and reconciliation, there’s no new shared understanding, empathy, or peace. Moreover it puts the
    person wronged in an inferior position because to others (and maybe to the person who should apologize) it looks like they’ve worked things out. Good apologies are sincere, and come from a place of humility. Buying someone a beer drowns the problem in a pool of ethanol.

    Beyond the potential damage to relationships happy hours can deal,
    events that center around alcohol are alienating for a variety of people: introverts, families, anybody for whom “just take an Uber” is an unsatisfactory option for getting home. But also for people who have lives outside of work. For many, spending 8 hours at the office followed by one or two more in a poorly-lit bar is stressful, off-putting, and exclusionary.

    Our San Francisco offices do a potluck lunch every week. It happens during the work day and people can choose how to route around it if it gets in the way of their productivity. I’m sure this is not without problems. We do a monthly game night in the DC office. I’m hoping we can do more things like that to be welcoming of people who don’t drink, or can’t or don’t want to attend happy hours.

  • Why analytics.usa.gov Matters

    Last weeek I had the pleasure of helping 18F launch analytics.usa.gov, a public dashboard showing basic data about how many people are visiting government websites at any given moment. While we got a lot of attention for it, being featured on Gizmodo, the Washington Post (twice), and a bunch of other tech and government industry press. More surprising to me was how many people I knew that weren’t in either industry that heard about it and wanted to build one of their own. (You should, you can, here’s how)

    Government websites at 8AM Eastern Time

    Why does something like this matter? Gizmodo and The Post did a pretty good job of explaiing that. This dashboard shows, at a really raw level, which parts of the government ordinary citizens interact with every day. Even in the wee hours of the morning there are about as many people interacting with a government website as can fill the Packers Stadium in Green Bay. At the time Gizmodo picked it up, there were 150 people on government websites, which is large enough that no football stadium in the country could hold everyone. They also compared forecast.weather.gov’s normal traffic to what The Dress was able to accomplish and weather.gov destroyed The Dress by about 20 million.

    One of my colleagues pointed out the weather.gov traffic was likely a lot of scrapers from news and weather organizations but that only reinforces how important these numbers are. As the Post put it, these numbers offer “an altogether different study of the population, one that highlights not just who we are, but what government services we find most useful.” And while the top two right now are the National Weather Service and “Where’s my Refund,” scrolling down the top 20 list reveals some surprising insights. The Astronomy Photo of the Day is routinely in the top 10. The Department of Agriculture’s home page also makes the list, but so does StopBullying.gov. Specifically, a page on how to stand up against bullies. Other top contenders also include websites for checking immigration status, Veteran’s Affaris and social security benefits, and applying for a job with the United States government.

    All told, there were nearly 1.4 billion (with a b) people who interacted with the government in the last 90 days. Put another way, that’s four visits per resident of the United states every three months. They’re coming to the government for information and help they know only the US government can provide. They’re coming for public services and resources they can use to improve people’s lives.

    To paraphrase the late Paul Wellstone: Public service is not about big money or power games; it’s about the improvement of people’s lives. Analyitics.usa.gov is an active expression of government “for the people, of the people, and by the people.”

    PS: while writing this post, about 20,000 more people started accessing government websites.

  • Be Proud of your Town

    A friend from Gustavus was in town this week on a visit sponsored by his graduate program at the University of Minnesota and we had dinner a couple nights ago. I asked him how is week was going, hoping to hear that he had met a bunch of people like my friends: mission-driven people working for organizations that are trying to make a difference, however small, in the world. People who, when asked what they do, lead with their life work, not their stratification in the DC hustle. I was incredibly sad to hear he heard from few people who represented the DC I know.

    Instead he saw a DC where people take jobs because they know it will get them closer to their next, more important job. They work extreme hours and attend happy hours every night so that they don’t miss the next opportunity. They represent their jobs and industries as impossible to get into, as if you’re nothing but your network. They represented our city as one that preys on this hustle, is impossibly expensive to live in, and miserably hot in the summer. You’d think we’re all Doug Stampers and Frank Underwoods out here.

    Did you know you can ride a bike from DC to Pittsburgh? You can also ride to Annapolis, MD and from there you can ride to Baltimore, and form there you can ride all the way to York, PA. You can do all that starting from the Lincoln Memorial.

    I couldn’t help but think: what if people in my hometown, Minneapolis, represented their city this way to would-be job seekers. Minnesota is dangerously cold at least one week out of every year, uncomfortably cold for up to two months, and from October till March it’s dark before you leave work. Yet somehow Minnesota has some of the world’s largest companies, some of the
    best places to work, more than 10,000 lakes and 22,000 acres of state park that hosted nearly 8 million visitors in 2012. If you’re a company or non-profit talking to out-of-state job seekers, which version convinces them to move?

    That is to say, while there is some truth in that bleak representation of DC, it is neither the whole story nor every individual’s experience.

    DC has real problems. For the people who really struggle to make rent, the cost of living and struggle to raise a family has nothing to do with their “networks” or “carrer ladders.” Local economics in this town are real, sometimes sad, and affect our vulnerable populations most. We have some incredibly smart, passionate, and capable people working on these issues every day, trying to make this city one that works for all its residents.

    I work in a competitive industry. I don’t really know how competitive it is to get a job at 18F but I know we we are hiring. But I also work at a place where we’re making a difference. In just the last week we helped introduce a
    new standard that will keep all Americans safer on the web
    , worked with
    State and Interior to shed new light on public data that effects every single American resident’s life, and had a public discussion about inclusivity in our workplace.

    When people ask me what I do, I lead with that. When people ask what my friends do, I tell them they advocate for children’s health, publish important public opinion research, teach adult ESL students, and the dozens of other amazing, inspiring jobs my friends and neighbors have. Some of them have had a few jobs to get to the one they love, but so have my friends in Minnesota. Some work crazy hours. Some spend their evenings networking. Others have hobbies, families, and spend their weekends enjoying their lives in DC, not hustling to climb to power.

    Part of what I love about living in DC is that so many of the 630 thousand people who live here are involved in work that shapes the lives of people in every corner of the world. Is the other stuff sometimes frustrating? Sure, but why focus on it? Be proud of your town, wherever it is, and be mindful of how you present it to others.

  • The Supreme Joy of Writing in the Open

    There are times when I’m spectacularly awed by Open Source Software. Today was one of those days. We published a blog post about how the team I work on uses the terminal, GitHub, and Jekyll to publish 18f.gsa.gov. This post could just as easily be titled “the guide I wish I had 10 years ago when I started tinkering around with web development.” On my way home, I did a little from-the-bus troubleshooting for a reader who was having trouble with our instructions and found myself appreciating how many people went in to shaping this post to where it is now.

    The last in the chain (so far) is a Twitter user and digital humanities professor I don’t know and may never meet in person named Heather Froehlich (@heatherfro). Heather tried following our instructions nearly immediately after my co-author, Melody Kramer, tweeted about it. Before @heatherfro there was Moncef Belyamani, who did a tremendous amount of extra legwork completely unsolicited to help us make the post clearer. He even wrote a script called laptop that future 18F team members will be able to use to make their lives easier on day one. In addition to Moncef were the other individuals who helped us find mistakes and add to the post. And none of this includes all the people reading it right now and those who might read it in the future.

    We didn’t just write a post about open source software and how to use it, we wrote it in the open and you can actually see the back and forth Mel and I had to update the post and even see where Moncef jumped in to help us. If you go back even further you can see an earlier revision where we got some help from Eric Mill. Earlier still we had help from Kate Garklavs in testing our tutorial.

    The post instructs people to use tools we built internally like the go script written by Mike Bland and myself, and the overall architecture of our site shaped by many people who have already been mentioned plus our colleagues Michelle Hertzfeld, Elaine Kamlley, Hillary Hartley and the dozens of individuals who have contributed to the site in one way or another. When readers run git clone in the tutorial, they are downloading the work of nearly 60 other people.

    Zooming out even further, when readers run those commands they are building off the work of thousands of other people who built the tools our site uses to generate: Jekyll is the bedrock with 430 contributors, but there’s also the handful of gems that go into making Jekyll work and everybody who had a hand in those projects. On top of all that, Ruby, the language every gem is written in, is an open source project with hundreds of individuals working on a given release.

    This is all to show how easily we can trace @heatherfro’s comments on twitter through a kind of supply chain of code, prose, and ideas that builds 18F’s website simply because it is open source. We don’t write all of our articles this way, but I’m hoping we do it more.

    One thing about GitHub I find profoundly interesting is their drive toward expanding the idea of working in the open to realms that are not programming. Last summer they introduced PSD Viewing and Diffing and later did the same for SVGs. They improved the interface for comparing text documents like Markdown so that it’s easier to see what has changed and have one of the best wiki platforms in existence (sorry, MediaWiki, it’s true). They’re building a robust collaboration platform that facilitates the kind of exchange of ideas and knowledge creative people crave.

    I’m attempting to relaunch the journalism project Danielle and I helped create in Seoul as a static site (using Jekyll right now, but Middleman is looking interesting). GitHub was just getting stated and I remember being really confused about what the point of version control was. Tearing apart that old WordPress theme was an exercise in seeing how far I’ve come as a web developer, and reflecting on the decisions I made and how many of them I would make differently if I were doing it today.

    One of the first things I remembered was sitting in a cafe in Hyehwa with the rest of the IU team, crowded around our MacBooks to unveil at least two different version of the site I had worked on by deactivating and reactivating different themes from the admin interface. It was extremely frustating, and laughable now that I know how to work with branches, tags, and commit history. I also remember emailing around PSD files when we were attempting to land on a logo, and using Google Wave (yes, we actually used Wave and kind of loved it) to discuss our drafts. I’m pretty sure we would have done if not all, a lot more of that in GitHub were it the platform it’s turned into today.

    This is not an advertisement, though. GitHub has some big flaws and barriers to entry for people who don’t have a lot of patience for the technical are still high. It is, at its core, a profit-driven commercial engine and the underlying codebase for GitHub is not open source and there’s no guarantee it will be around forever.

    One thing I love about open source projects is their potential for immortality. WordPress has a particularly delightful open source story. Matt Mullenweg loves telling it and I’ve summarized it before, but the gist of it is that love it or not, WordPress would never have existed if not for the open source license of the project that preceeded it, b2/cafelog. That immortality and spirit of picking up a project where it was left is still fairly unique to software. Copyrights are, by law, “fixed in a medium,” they are often thought of as complete works and create strange legal issues for derivative works or remixes. If we can one day have a society where works of art are as open and communal as works of code, that would be a truly wonderful place.

  • But Jekyll is not a CMS!

    Honeycrisp orchard, my favorite apple
    image from wikimedia commons

    Earlier this week I wrote another post comparing static site generators to
    content management systems
    using Jekyll and WordPress (perhaps unfairly) as representatives of their respective technologies. It got me thinking that in writing it I was compairing apples to oranges. Static site generators are not content management systems. They are generators, converting properly formatted input into webpages. To compare it to a content management system is like comparing TeX to Microsoft Office. Perhaps a better metaphor than apples and oranges is apples to farmland.

    The things I outlined that static site generators don’t quite have down are really all management tasks. A built-in text editor, management of  categories and tags, clearly defined content types, automatic rewrite rules for if you rename a page, I could go on and on: These are all features a good content manager should have built in. With static site generators you have to do all that yourself, particularly if you’re hosting your site with Jekyll on GitHub pages or want to add commenting to your blog posts.

    I am under no illusion that this blog will probably never have anonymous, inline commenting like it did when I hosted it on WordPress, but it was a conscious move to encourage my readers to comment through GitHub issues and pull requests. Most of my comments were fixing my typos anyway and now I don’t have to log in to my admin screen to fix them. They fix themselves! That is all to say, if I wanted to get away from a particular content management system I could have easily switched to a different one, and if I wanted a DIY content management system I could have used Django or learned Rails to build one. Switching to a static site generator was an intentional decision to reassess the value of all the things a CMS would give me by eliminating most of them completely.

    CMSs are apples. You know what to expect, they’re easy to eat, and you get roughly the same thing every time. Static site generators are farmland. Maybe you’ll plant an apple orchard, but if you’re not into apples, you could grow something that works better for you. It’s been a fun road
    so far, not only learning the new thing, but also appreciating the do more with less attitude that comes with having to do everything up front.