Programming Discipline: Beware the Hiccup


It’s called the “Yips” in sports. Technically, it’s the loss of fine motor skills - typically in golfers and in pitchers - but it’s normally associated with performance anxiety, especially when a single thought enters an athlete’s head and they can't shake their self-doubt. 

It’s likely every profession has its own version of the yips - doctors hands, lawyers wonder if they made the right call, and entrepreneurs doubt if they they made the right investment. However, there are more insidious thoughts, and programming in particular has an associated condition that is rampant - the hiccups.

Physically, people drink water upside down, hold their breath, and so on. We’ve heard them all, yet I’ve found that the best way to stop the hiccups is to do something that distracts you, and then later you'll notice they're just gone. Still, most have us have probably been there - angrily shouting at our involuntary spasms, pleading for them to just go away.

Along with our feeble attempts at bargaining with the hiccups, we’re distracted from whatever is we are supposed to be doing. This where the symptomatic similarity to the programming profession begins.

Hiccups in programming are where a coder slowly but steadily begins to distract themselves, maybe it starts with a personal email, some busy work like reorganizing a Jira board, or checking Twitter / Reddit / HackerNews just real quick. This usually happens because there was some technical problem whose solution wasn’t immediately obvious.

Of course at this point, whatever problem that was in the coder’s head is gone, so returning to the problem is even more frustrating so the need to further "step away for a moment" increases. If you had checked Reddit, maybe it’s time to check out those SubReddits as well. Also, didn’t you get a LinkedIn notification this morning that you ignored? Should probably check that out too.

And so the initial hiccup starts to become the coder’s sole focus. Further distraction doesn’t help a programmer’s analytical mind, just as in school, when you were stuck on a hard problem, you didn’t simply decide to do no homework at all, instead you moved on to another problem and circled back.

Maybe it has to do with the fact that most programmers enjoy being on computers or that everyone have so many resources / sources of entertainment and education at our keyboards, but the hiccups can ruin an entire day after a couple minutes.

While there’s plenty of tools out there to block websites, in reality any coder knows how to work around these things and typically can perform the mental gymnastics to excuse their behavior.

Instead of using yet another tool, simple mindfulness is the way to go and it starts with giving the problem a name.

So here we go - beware the hiccups.

Convoy Has Launched!


We’re very pleased to announce that the new version of Convoy has launched!

This fall, Greyland partnered with the design lead at Convoy, Jason Kopec, to implement a refreshed and expanded design to better reflect the expanding features of the company and its evolving design aesthetic.

Using their existing Wordpress codebase, Greyland developers modified the existing theme to allow Convoy to have much greater control over their content - both in page text and in reusable content such as signup forms and press releases.

We really enjoyed the route map design features

We really enjoyed the route map design features

We find that often a large frustration for site managers is a complicated design that will end up requiring a large amount of hard-coding of content pieces. This unfortunately undermines the intent of CMSs - to give admins and editors control.

However, it can also be the case that an obvious solution like a huge textarea that gives editors control is almost just as hardcoded if the WYSIWYG is filled with complicated <div> structures and class labeling. The middle ground is instead to leverage the Custom Fields plugin, theme options, and custom post types to allow ease of editing on the backend while avoiding heavy reliance on the WYSIWYG. In other words, break things up into separate fields.

The trick of course is to avoid getting things too unwieldy. This is where custom plugins can be useful, further subdividing content types as with Convoy where we decided to break press items and forms into their own pieces so that pages that leveraged this content wouldn’t also have to be burdened with more complexity.


In all, Convoy was a fantastic design team to work with and we hope this site will generate even more success for this growing trucking company. For Greyland, it was an opportunity to practice properly migrating a legacy site to a new content management format and design while still preserving existing work. It’s a great example of how Wordpress’s simple templating system and field system can deliver fast results with a lot of visual and content complexity.

Programming Discipline: How to Read


Years ago, before boom of online academies, the simplest way to get a dip into a programming language was to get a book titled Some Language in 24 Hours.

Regardless of the language, 24 Hours or Dummies-style books followed a simple pattern: how to do loops, conditionals, functions, maybe classes, and finally some advanced application using what was learned earlier.

When I was young, I foolishly thought that reading one book from each language would make me a master programmer. But no, fortunately things are not that simple, and more advanced books were necessary.

I don’t mean books with just the word “advanced” in the title. There are textbooks, topic specific books, language agnostic books, and even more experimental pedagogical books, which The Little Schemer stands out as perhaps the most unique.

But unlike those introductory titles, before enjoying these books there’s a mental leap that needed to take place - one must accept that they may not read the same way anymore.

Take Design Patterns, which has a format that’s meant to be dipped into overtime as project challenges require. Sedgewick’s Algorithms for the non-student is more enjoyable to take multiple passes through, each time diving deeper into the proofs and chapter questions as understanding grows richer. Ericson’s Real-Time Collision Detection or Millington’s Artificial Intelligence for Games are fun to walk through slowly, consuming new topics as confidence grows and projects gain complexity. Regardless of the format, reading straight through in a timed manner, just doesn’t make sense or is even counterproductive.

The read-as-you-need approach is practical, but there’s one more thing necessary advanced programming titles -  acknowledge that some books may go right over your head or just not connect immediately. This is basic humility, but also a step up when transitioning from books / courses that want you to succeed to books that demand you meet them on their terms, not your study schedule.

Both of these ideas are antithetical to the genius hacker hero model that pervades the programming mindset. Of course, every programmer should be able to read any book at any time and get it the first time and never need to go back. Anything less and you must be a non-Rockstar!

One of the most common adages in programming is that “you spend more time reading code than coding.” It’s a shame that with so many titles out there for professionals and amateurs, that we spend so little time discussing how to do our most time consuming activity.

Division of Labor

Photo by  Sabri Tuzcu &nbsp;on  Unsplash

Photo by Sabri Tuzcu on Unsplash

Let’s say something obvious - in any good client-vendor relationship, it’s important to define who is responsible for what.

Great. I assume this is why a lot of contracts simply read: “Vendor agrees to generate digital products. Client is responsible for final sign off.”

Sure, this makes writing contracts easy, but the ease and relaxed attitude comes with a cost. Before writing another generic contract, let’s take a look at a couple of possible, and likely, confusions that a lack of clarity can lead to.

Vagaries can lead to a false sense of security

One group can simply assume the other group has ‘got it covered.’ 

Take for example a pretty common ask - “Have proper SEO on our website.” From a developer’s perspective this is proper semantic structure, correct meta tags, and a handful of other important technical tasks. However, in the back of the dev’s mind, they may be thinking, “This is good, but what is most important will be the linking strategy and the content generation, which of course isn’t my responsibility.”

Perhaps everyone involved is SEO savvy, perhaps they are not, and so when the dev in question offhandedly mentions his thought above as the client’s job, there is likely to be a few questions, namely: “I thought you were handling the SEO?”

The definition of digital is too broad

Everything is managed digitally now, so while it may be clear to a developer that they are only supposed to handle Wordpress theming, in a client’s mind “building a website” may include logo design because, after all, it’s part of the website, right?

What’s ideal for both groups may be in conflict

While in the past, developers could put together a site that was easy to code and impossible for the client to modify, these days non-tech people are quite comfortable with complex interfaces and content management. So discussing beforehand what the client would like to control gives the vendor scope on how elaborate the project may need to be.

Consider - how often do logos change? Surprisingly often, so hard coding the header may not be appropriate for a project. It’s a mistake on the vendor’s part to assume that they are completely responsible for everything on the site just because it may have a technical solution.

Finally, Be Wary of Favors

Even when responsibility is properly divided, favors can be nice, but they are not always the best idea. For example, a developer may be happy to throw out a couple design suggestions for a sidebar; a client may have no trouble checking how the site looks on the Android phone that the vendor doesn’t have on hand; or maybe every one collaborates on a digital strategy report intended for upper management.

While these are all great, the size of favors can quickly escalate. Site needs a new section? Sure - let’s just have the dev throw together some wireframes, interactive comps and so forth, as they did so well previously with the sidebar. Vendor is pushing through dozens of changes each week, so let’s send the client thirty emails to double-check changes on Android. And did we mention that the boss wants a few more paragraphs on digital market penetration in the Canadian market?

It’s nice to do favors, but make sure favors don’t turn into obligations.

In Closing

Overall, these details can be made clear up front and that’s why it’s important for both sides of the table to not only explicitly state their responsibility, but discuss with some detail what each side plans to do with said responsibility. This can be as detailed as outlining what each side perceives as an SEO strategy to being clear that developers are not designers or to only send emails at random times if they are urgent.

None of this discussion has to be harsh or defensive, and it may actually be a good start to better understanding, and heck, even liking each other.

ZigZag is Launched!


We’re pleased to announce that Greyland has just launched the new ZigZag Cafe website!

ZigZag is a Seattle cocktail institution in Pike Place Market. Low warm lighting, craft cocktails, and a full menu have made it a popular date and drinking aficionado spot. Needless to say, we here at Greyland were more than happy to do plenty of research into our client’s business.

Like many small businesses, ZigZag originally had a simple static website that got the job done - map to the location, excellent photography, and low maintenance. However, every business changes as it goes - new staff, revised description, and specifically in ZigZag’s case, seasonal menus.

Wordpress was the most obvious solution, but not for blogging. Its simple page structure matched with the Advanced Custom Fields plugin, allowed the ZigZag to quickly enter and alter menu content as well as being able to reuse menu sections between different menus. The goal was to allow for simple text content entry with the power to shift those around using a draggable UI.

Paired once again with Royce McLean of Galvanic, we wanted to create a simple site that really demanded - get out of the way and show us the pictures and menu. McLean added small touches of scrollwork and matched the site’s theme to the lighting found in the cafe.

Dessert menu demonstrating the various scrollwork

Dessert menu demonstrating the various scrollwork

We really wanted to reflect Cafe owner Ben Dougherty’s focus on mood over what can typically happen with restaurant websites - black tall san-serif text on white background next to huge pictures. No offense to this (SquareSpace, who powers this site, has killed it with this approach), but small bits of tone can go a long way.

Obviously check out ZigZag if you’re in Seattle, and if you’ve got a similar site in need - feel free to reach out.

Project: Guardians of the Elusive Mole

Last year, Greyland partnered with Northwest University and Galvanic illustrator Royce Mclean to create a chemistry game for students to help them learn about the science's primary unit of measurement - the Mole.

Previously, the school had found that students had tremendous difficulty with the concept. A couple years ago, just for fun, a student decided to write a “Let It Go” spoof about the mole. Surprisingly, despite its just-for-kicks approach, when the song was sent to the rest of the chemistry students by Professor Caicai Wu almost everyone improved their test scores. After seeing this success, professor Wu thought that a game would be the next best step, so she reached out to fellow professor and Greyland developer, Corey.

After a number of discussions, along with a little remedial chemistry, the Chemistry department and Greyland developed an outline for a simple quiz game that used the ice theme of Frozen. Royce decided to amp up the cute characters from Frozen, drawing inspiration from Nordic mythology, to create the Chemistry Guardians.

Royce’s design gave the game a quirky intensity that we believed would create a lasting impression on students. As professor Wu discovered with the original mole song, giving students these out of sorts experiences helped them remember as the song and here with the game, the approach was not the type of thing they’d typically see in a chemistry class.

Coding a project like this has pretty low overhead. The primary concerns were responsiveness in the question frames and ease of editing content. Using a “Bill of Materials” (BOM) approach, the game engine simply ingested a JSON object that had all the questions, labels, answers, hints and then built out the each stage as the student progressed. The structure was simple enough that we could use the same level and menu parent classes to build out level screens as well as the introductory and end screens.

The game is planned to be used as part of the chemistry department’s 2017 curriculum and we look forward to hearing about how students react. You can play the game yourself on Greyland’s mirror.

Programming Discipline: Daily Logs

Behind my desk and under it are hundreds of pounds of books on programming. There are the usual suspects: language books, textbooks, hardware documentation, how to run software teams, and then there are the books that talk about software craftsmanship.

Programmers get into the field either from a specific starting platform or language, usually to accomplish something right in front of them - I want to tweak Minecraft, I need to fix DOS, WordPress isn’t doing the thing I want. It’s code sure, but operative in the way Excel equations total expenses. They aren’t about mathematics. It’s only later on that programmers start thinking about platforms and languages agnostically.

So we come to books such as Code Complete, Clean Code, The Pragmatic Programmer, Refactoring, Domain-Driven Design, The Practice of Programming, Growing Object-Oriented Software Guided by Tests, and Design Patterns.

I own all these books and others. They’ve helped me a lot, however, these books and every rockstar programmer have never suggested what every English teacher has told you - journal every day.

Journaling is typically thought of as - what did I do today? Nothing against this of course. Folks write down what they learned, what they did well, what they could have done better, what they’re excited for tomorrow. All great, but not what concerns me.

Another approach for programmers is to log your progress through issues. Keep track of every step you make through a problem - your false starts, the line numbers affected, links to documentation related to the problem at hand, comments on improvements / future refactoring, places where you made decisions that involved technical choices versus financial / time pressures, and then narrate it all.

The log becomes your consciousness as you go and it serves a few purposes. First, it allows you to go back and get in your head space when you were last working on a section of code; second, if you happen to get abducted by aliens, someone can follow where you left off; third, it forces you to justify your actions to yourself and others in the future.

If you are explaining the issue to yourself, you are essentially trying to explain it generally, which means you can anticipate questions, concerns, and identify areas where you need to research more.

Programmers have this tendency to be way too declarative as if one problem had only one solution, while at any decent level of complexity, naturally there will be multiple solutions. Just like a doctor or lawyer, by logging you are building a case for your approach. And it begs the question - have you really thought about why you approached the problem in the way you did?

When you’re starting out, programmers can get focused on just seeing issues move across the Jira board. When they move on past that, work might move into sufficient stability with impressive speed. Past that, coding might be implementing what seems sufficiently complex to merit either awe from the younglings or depth that no one is really patient enough to investigate your decisions.

When you journal your decisions, none of these are acceptable.

To make logging even more disciplined, share your log with your team (we do this here at Greyland). This will expose your thought process and research, which enriches everyone, and encourages everyone to do likewise, even if no one ever reads it.

In the future you may be a overseeing a complex systems, with billions on the line, and people’s future and lives in the balance - wouldn’t you like to be practiced at explaining yourself?

Simple game, great interactive

The New York Times did some clever storytelling for the Women’s World Cup Finals - remove the balls from their pictures and let the users, based on the pictured athletes motion and eyes, guess where it was.

Since most people don’t do this sort of thing on a normal basis, after a couple rounds you’ll start to intuit where the ball may be, and your guess will be contrasted against others after you commit to a guess.

As a non-soccer fan, I like this interaction - it’s a simple idea that works well on the web and draws in readers like me. I didn’t give the text too much thought, but I tried several pages of the ball guessing.

Moreover, the NYT chose a small game that wasn’t gimmicky or too on the nose. Approached another way, this could have been a silly “kick the ball” advert-mini-game that didn’t expose me to any of the actual athletes or at least attempt to engage with the timeline each guess fleshes out.

Best of all, I don’t actually have to engage with the guessing game if I don’t care. Ultimately, it’s a nice balance of appeal for both the fan and bored internet clicker alike.

I don't think Minecraft means, what you think it means

I’ve heard Minecraft described as “Legos for adults.” That’s a fairly good generalization to the uninitiated player. However it’s more - it’s getting to live, explore and create in that Lego-like world you inhabit.

And it’s why I don’t really get the excitement around Minecraft using Microsoft's new HoloLens.

The demo looked really incredible, and I can’t deny that there is a charm to interacting with your MC world from a new perspective, as if they were actual blocks in your home. Tabling the criticisms of the HoloLens around its small viewport and orientation procedures, the gameplay in Minecraft with the HoloLens overall doesn’t appeal to me. In fact, the HoloLens kind of ruins the fun.

Take the far-off perspective available with the holograms. The flying perspective native to Minecraft doesn’t let you slice the level as shown in the demo and only occurs when in creative mode. Albeit, this is a feature beyond what’s currently available, however, discovering fortresses and caves, along with their resources, using this feature takes away the fun. If you can just zoom out and spot what you need, there goes the excitement of finding it. Part of the addictive nature of Minecraft is the feeling that there’s something special just beyond that next block, but with the HoloLens, you won’t anticipate, you’ll just see.

Watching and tracking players from a real third-person perspective is, again, novel, but is antithetical to the immersion of the existing game, or really most games.

Seriously - if I am trying to enjoy a game and my wife is making dinner in the background or my cat jumps on the table, I can’t really get into that game. I don’t require a first-person perspective for immersion, but now the real environment can affect my focus on the game.

I can see some value to the holographic perspective. First, if features like drag could be added to allow players to quickly set a line of blocks, or even a wall, this would save a lot of time for creative builders. Second, when playing with other people, it would be a lot of fun to have a “dungeon master”-like player would add some fun multiplayer gaming scenarios and adventures.

However, that’s really the core of it. The gameplay that is the joy of Minecraft - immersion, exploration, and laborious creating a huge structure in survival - is removed by the HoloLens and we as players can think of some places where it might work, but ultimately, I just want to get back to my laptop screen.

IHOP Logo Redesign

IHOP has redesigned their logo after almost 20 years. The chain launched in Los Angeles in 1958 and has since built an empire of more than 1600 locations nationwide.

I like the update personally, it leans into their "friendly, no nonsense" brand vibe and feels welcoming. I can't say that I frequent IHOP on a regular basis, but the memories I DO have of going their are all filled with warm fuzzies. Whether it's all the choices of pancakes and syrups or the never-ending cheap coffee -- it's all good as far as I'm concerned.

Curious to see what the "Summer of Smiles" campaign, that roles out along with this new logo, will look like. No doubt they are trying to leverage some recent momentum in their domestic sales growth. I say "Good Luck IHOP." I hope you're filling bellies with pancakes for years to come! 

Dragon Warrior with a natural terrain generation

Hunter Loftis has been one of the more fun programmers I follow online. He's created a good reputation for himself by taking seemingly complicated graphical programming tasks and creating simple JavaScript that produces FPS engines and to the point of this article - natural terrain generation. 

Loftis used the midpoint displacement algorithm to generate 3D geographic maps that even had a sea level. Brilliant, but honestly a little too complex for my blood. 

What I wanted was the ability to create simple 2D maps that resonated with the RPGs I played as a kid and teen, and so I altered Loftis' algorithm and generator to produce geographic maps using the art from the 1989 game Dragon Warrior. These maps follow the geographic generation algorithm but instead of producing three dimensional height, instead mountains, hills, sand, grass and water indicate elevation. 

Loftis did a fantastic job communicating a simple but powerful algorithm. I've seen lots of tricks for terrain generation for games and writers, but this application is by far my favorite as each load of the program is a surprise. 

The code is available on github and if anyone wants to fork it and add caves, villages and castles, I look forward to any additions. 

Apple Watch: Friend or Foe?

I am on the fence about Apple's latest release of the Apple Watch... is it just another piece of technology that I will get bored of like I did the FitBit? 80% of FitBit users discarded the bracelet after just 6 months of use. The battery life is also a problem. If this is supposed to replace my watch, but it doesn't have the battery life to stay illuminated what good does it do? It needs to be charged every night no matter what, which just seems impractical for a fashion accessory.

I know the biggest bonus of this device is the push notification feature, every email, text, tweet or Facebook message can be pushed to my wrist. But I ask, do I really want another electronic thing to check all the time? I can picture it now, I'm at lunch with a friend and I've made the conscious decision to keep my phone in my bag so I'm not tempted to get distracted and check it. Now however, I have easy access 24/7 right in plain view. When people are already having trouble disconnecting these days, isn't this just another in-your-face distraction?

I get that the apps are also intriguing, most perhaps being the two fitness apps that come pre-loaded. It allows you to track the standard stuff, heart rate, and steps but the watch nags at you when you've been too sedentary. However it can't differentiate whether you're working or driving in your car. Great, so now on-top of my own self-loathing because I didn't hit the gym that morning, now I get judged by my watch? No thanks.

I'm most interested in the Apple Watch when our environments become more customized. Example, I walk into my favorite coffee shop and my apple watch pings their digital system to start making my favorite coffee which is then automatically payed for all without me having to launch anything. When that is possible, I'll be the first one in line to buy that watch.