Stay Awhile And Listen

I like building. There are very few activities that can monopolize my attention span for hours on end like assembling individual pieces to form something new. It doesn’t matter how trivial its purpose is. I obsess over it, sifting through all the components to find which combinations give me the best result. As useful as this has been for work, I didn’t get it from freelancing or employment. I got it from videogames.

Deckard Cain is a chatty old man in one of my favorite videogames of all times, Diablo II. He wants to tell you all about the world you’ve been dropped into. He wants to warn you about upcoming challenges. He wants to advise you on where you should be heading to make progress. All Deckard Cain wants to do is talk to you. His catchphrase is “stay awhile and listen”.

Conversations with Deckard Cain are useful because the world of Diablo 2 is gigantic. The maps you must explore are randomly generated every time you start the game. You must re-explore it every single time you play the game. The checkpoints scantily scattered across the world don’t save your exploration progress. They save your time but it’s likely your objective is 3 or 4 (or as many as 8!) randomly-generated maps away from the checkpoint anyways. Considering how long it takes to fully explore each map, it’s really not a game you want to be running around blindly in.

Building for the web is very similar to the ever-morphing world of Diablo 2. Every browser is its own unique environment – no two are completely identical. Browsers change between versions. Sometimes very drastically. Internet Explorer is so different from version to version that it requires special attention to accomplish the same task in different versions. Web Developers have leaned on collections of code to make working in browsers easier. Today there are so many different collections of code that choosing the right one for your project is a bigger problem than dealing with different browsers! If you’re working with a team, better pray they are willing to use the same collection of code you want to work with.

All of these “explorations” keep web developers from reaching the true objective: the thing we set out to build in the first place. To that, I’d like to channel Deckard Cain and give one piece of advice: “Stay awhile and listen”.

1. Listen to The Client
The desire to start building right away is so strong that it’s entirely possible to miss what the client wants and build something they aren’t willing to pay you for. Deckard Cain doesn’t speak until you click on him, so don’t expect to get nuggets of wisdom from your client without engaging them in a conversation. Whatever you do, get them to talk and be sure to listen. They may tell you in absolute terms what you should build. Sometimes they won’t. What’s most important is understanding why they need a solution in the first place. Nothing requires you to solve it in the same way the user expects it to be solved. In many cases, solving it exactly as the user expects will result in something they’re not willing to use! Listen to the user to understand why need a solution. Let their problem guide you to the best approach.

2. Listen to Your Environment
What you’re working with directly limits what you can build. There are things that are impossible to do in the browser. Out of the things possible in the browser, some are impossible in your framework. Some features available in your framework are unfeasible due to your project structure. You really want to listen to all these constraints, because the solution you’ve envisioned might not be possible to execute due to circumstances beyond your control.  Don’t waste your time when your environment and what’s available in it will tell you the limits of what you can accomplish.

The more you stay awhile and listen, the better the quality of things you build. This isn’t limited to Web Apps or Diablo 2 characters. The quality of my relationships have improved as my ability to listen increased. An area I’m still working on is completing people’s sentences. It’s nice when I’m right but the satisfaction is shallow and fleeting. It’s downright embarrassing when I’m wrong. All things considered, I should be fully listening; focused on what they have said and never assuming what their next words would be. That’s not what Deckard Cain would advise me to do.

Building is hard. The challenges keep coming. Even when you’re “done”, you can expect more challenges to turn up. Don’t sweat it though. Repeat the following words and let them guide you to the right solution:

When the going gets tough, stay awhile and listen.

Much Ado About Netting

Sometimes I let my mind wander. Not the way one lets a dog out into the yard or a newly-wed lets their partner hang out with old friends. There is no fence when my mind wanders. No phone call when the sun goes down to inquire its current location or when it’s coming home and if it could pick up milk on the way back. I let my mind go and dutifully waits for it to come home, like a wife waits for her partner to return from a tour of duty. Now that I have a blog, I feel compelled to share the details of its most recent trek.

You, me and everyone’s grandmother are familiar with the word network. That’s right. You too, reader of undetermined age or gender, must be familiar with the word simply because you are reading these words. You (or someone else) found where I placed it on the Internet and through undetermined steps since then, you are now reading it. According to Wikipedia, the Internet is a global system of interconnected computer networks. Which means my network is connected to your network and our networks worked to get this post on the screen you’re reading it on. Or paper, if you’re the kind that likes to print things. I’m not judging you. My point is there’s no way you’re reading this that isn’t a result of networks working.

I’m in the process of learning Japanese. I’m at the stage where I can identify individual letters, but not words. Japanese people don’t use spaces in their sentences. Don’t ask me why. I’m still at the stage where the method behind their madness is eluding me. A side-effect of their spaceless writing is I spend a ridiculous amount of time dissecting every word that is a combination of other words. For example, Wednesday is 水曜日. 日 is the character for sun or day. Makes sense so far. But why is the word ice (水) part of the word Wednesday?? I challenged myself to learn Japanese so I’m not backing down. Not in the face of utter madness.

My mind started trying to dissect the word network. “It’s obviously a product of the word net and work“, you’re thinking. You’re clearly cut out to learn Japanese too, I’m thinking.

Wikipedia says a net is a device (!!!) made of fibers and woven in a grid-like structure. It blocks the passage of large items while letting small items and fluids through.

In other words, a net is a grid and the work it performs is catching objects of predetermined size. A net’s work is catching. Network is catching.

It’s important you know the size of what you want your net to catch. Fishnet stockings, for example, don’t catch leg hair. They catch the attention of perverts, who are bigger than the proverbial and literal plenty of fish in the sea. If you want to catch a non-pervert (fish or man), fishnet stockings are not the best net to use.

Social networks are designed to catch all things social. Nobody wants to be caught, though. Not even social people. They tend to revolt when they see how much of their social activity has been captured by networks. But that is what networks do. They catch things.

Every creature on this planet is wary of nets and their work. Builders of nets strive for transparency. Spiders build their net from hard-to-see materials. Flies fly right into a spider’s net and the net works. Credit card companies build a net out of hard-to-see materials. High school graduates fly right into the net and the net works. They might escape from the net just in time to warn their own kids, but only the sharpest of kids see the net and avoid its work. The rest become haplessly tangled in it.

I think I’m unwittingly giving nets a bad image. They aren’t bad. It’s just that their work is valuable to all sorts of people, good and bad.

Firemen and trapeze artists rely on nets to provide safety to their often dangerous work. They aren’t bad people. Their work isn’t bad either. Many governments provide social safety nets. I can’t say if these governments are good or bad, but they are doing tremendously good work with these specific nets. I won’t comment on other nets they use, like stuxnet. All I’ll say is they had no desire to catch stux.

I like the Internet. The Cartoon Network website caught me as a child and I challenged myself to design for the Internet. I sift through other people’s nets and find funny pics, interesting comments, videos (all legally, Internet Police; nothing to see here), music (also legally) and articles. The Internet is a major contributor to the type of person I am and what I do. You can even say I wouldn’t be doing what I do without it.

I was caught by the Cartoon Network’s net’s work and my life has forever been changed.

The next time you get caught in a net of some sort, don’t get annoyed. Take a moment and think carefully. You might find sheer delight and a lucrative career path in it. If anybody disagrees with you on this, tell them to come to me. I’ll win them over to the net side.

Challenge Accepted

First Blood was about how I miraculously got over 5 years of procrastination planning, put up this blog and turned over a new leaf. What I didn’t mention is how it was part of a challenge I had with my doppelganger: Adim Ofunne.

There’s a proverb I heard growing up that I never quite appreciated. The child of the cobbler has no shoes. It doesn’t even sound like a proverb so I don’t feel guilty for not getting it right away. The wisdom tucked into that proverb is that when an individual is paid for a service, it’s unlikely they’ll perform it for free. I don’t believe its because they are cold-hearted. It’s in a parent’s best interest to provide shoes for their child, after all. I like to believe that when surrounded by their tools and placed in their work environment, most professionals will rather do paid work even if the free job is in their best interest.

Adim and I build websites of varying complexities for a living. Setting up a blog is hardly a test of our technical competence. We aren’t strangers to the importance of writing because a suprisingly significant percent of our jobs is keeping up with our field by reading other people’s blogs. We can set up a blog quickly and we know it’s important to blog. We can do it and we want to, but we never did. We were the cobblers who somehow never made shoes for our thoughts to wear while they traveled the internet.

How did we overcome years of procrastination planning and get our blogs set up within a few days of each other? We challenged ourselves.

As I read his first post, Child like thoughts, I realized that it was fear that was keeping us from doing it. Scared of what people will think of a Software Engineer with a so-so looking blog. Scared that what we’ve written won’t be anywhere near as impactful as the awesome content the internet is already filled with. Scared that it won’t turn out as planned. Somehow the friendly challenge made us forget all that and press on. The challenge got us where skill, desire or foreseeable benefit didn’t.

My girlfriend says I’m always ready to accept a challenge. I don’t know if that’s entirely true, but I have found great success in posing a challenge to myself and trying my best to accomplish it. Some of them are pretty ridiculous, in retrospect.

I challenged myself to walk to work one day. I was pleasantly surprised when I did it and challenged myself to continue doing it. What I didn’t know at the time was that it’s roughly 4.5km one way. Just found out a few minutes ago when I pulled up the route on Google Maps. I walk 4.5km a day (9 if I’m feeling up to it) and it all started with a personal challenge.

I challenged myself to learn Japanese. I’m still woeful at it and need all the help in the world, but I can identify most hiragana, some katakana and a handful of kanji. Stringing together a sentence is beyond my capabilities, but I’m not backing down.

I challenged myself to live off ramen for a month. That was a really stupid challenge. I lost a whole ton of weight and looked really sickly but I completed it! I’m challenging myself never to mess with having proper meals and eating well ever again. Please God, don’t ever let me fail at this.

Challenges are awesome! You’re capable of so much more than you know, but you won’t know til you push yourself. Do yourself a favor and take a page from Barney Stinson’s playbook: challenge yourself today.


challenge accepted

First Blood

When I start writing code, the message I attach to the first save is FIRST BLOOD. Every. Single. Time.

The phrase comes from a sound-file built into a number of competitive online games that is played the very first time a player has been eliminated this round.

The attached note the first time I used the phrase in my code is:

Extracted from YKNightlights and retrofitted for general purpose usage

YKNightlights was a lifestyle blog I worked on for a friend and his buddies back in 2012. It was a pretty ambitious project on both our parts. The layout was very custom.  To build something that complex, I pushed my knowledge of WordPress, PHP and Javascript to the limit. The closest thing I’ve seen to it since then is Life+Times. I’ll take that as big plus since I like Jay-Z.


We worked really hard to deliver a unique experience. Keyboard arrow keys were scripted for easier browsing. Left and right to tab through the picture grid that served as content navigation. Up and down to jump between header, navigation and content.


If the link you visited had content on it, the browser jumped directly to it. We had fun working on it, injecting our humor into it. Like what happens when there’s no search result to display.


Not only was the front-end custom, the back-end was too. I wanted to make it easy for them to run the site, so I designed and implemented panels that didn’t come with WordPress just to make it happen.



The more I did freelance work in WordPress, the more I needed to make custom control panels for clients. I got tired of having to jump into the project to get that bit of code or remember which project has the most updated version of it, so I extracted it from YKNightlights and retrofitted it for general purpose usage.

That piece of code became my first open-source contribution and I was really excited to publish and update it. I’m probably the only one that uses it, but I’ve kept it up-to-date to the best of my ability. I use it religiously when I have to customize a WordPress backend. Not because it’s perfect. It’s never been and probably never will be. I use it because it’s in public space and it’s now my job to keep it in ship shape for whoever happens to find it and use it.

In a way, it’s the perfect metaphor for this blog.

I’ve always wanted to have a blog. I’m a designer and a developer, so I always wanted something unique that showcased that so I planned accordingly. Somehow I’ve spent the last 5+ years planning, sketching, conceptualizing, daydreaming and I’ve never gotten around to it. Until now.

I bit the bullet and threw up a WordPress installation, didn’t even switch the default theme and just started writing. I’ll design it later. I’ll make beautiful illustrations for the site later. I’ll code up some amazingness some other day. Not today though.

Today is the day I draw First Blood on my own corner of the internet.

I’ve downed my first opponent in the battle for my own beautiful corner of the internet, but there are many tougher challenges to surmount than just starting. I’ll draw inspiration from my time working on YKNightlights and push with every fiber of my being to make this space exactly what I want. I may never succeed but heaven, earth and hell will know I never gave up.