Scary Words in Programming

Pam Selle’s Scary Words Badge ūüôā

In true Halloween fun, Pam Selle has written a “Scary Words in Programming Contest” for tech savvy bloggers. This is my entry.¬† Can you guess what scary word the narrator is? As a Front End Developer this is extra scary. Happy Halloween!

I Am Awake

I am awake. My eyes slowly adjust to the darkness and then I begin to understand the reality of it all. It is an eerily familiar and disturbing realization.

I have been here before.

Am I dreaming? How have I ended up here? Where is this place? What is this place?

I am lost and confused.

The smell of silicon and solder, the taste of metallic water, the silent hush of darkness…what is this place?

There is a dark pathway made of a dense ever-flowing liquid material. Although blackened in color, light seems to flow within it‚Äôs core like millions of shooting stars in the void of outer space. Occasionally a spark of light flashes far down either side of the pathway. Then, as quick as it comes, it is gone as if it were a magician’s trick.

My mind is clear, yet I feel constrained, chained to some overwhelming feeling of duty that I cannot deny. A whisper comes out of the silence. It is raspy yet ominous and although I feel I know the voice…I cannot place it. I only know that I must listen.

‚Äúeach shall do‚Ķ‚ÄĚ

The voice is cryptic and foreboding. I feel shivers up and down my spine but I am here for some reason. I know it! I know it deep within me but I cannot explain why. What could it mean?

Before I can consider this message, it is replaced with the sounds of echoing footsteps. Someone…or something is out there. I can hear them breathing heavy and moving closer.

…closer…and closer

…faster…and faster

A figure emerge before me. She speaks with a powerful voice that penetrates beyond the pathway and burns into my ears. It is as if a god is speaking through her.

‚ÄúThe process‚Ķ‚ÄĚ

The words ring painfully through my heart as a clear understanding awakens deep down within me. Suddenly it is as if my purpose in this has finally been revealed. This is the only truth I need know.

She is driven by some force that I now understand deep in my subconscious. Reflexively, I extend my hand to her and she presents me with a piece of parchment. The strange words and symbols begin to decode in my mind and burn into my memory. I immediately understand what has been entrusted with me…what has been shared with me. Then, quickly as she appeared, she is gone. She vanishes into thin air with the blink of an eye.

It was of no concern to me, This is what I have been searching and listening for all this time.

I read the words out loud. Suddenly I feel the desire to do what is necessary

…what is commanded of me

…what I was spawned to do.

I need not read it again, for its words are now etched in all of my being. The process has made it clear to me now.


I can feel a surge of energy & information filling my mind, empowering me with purpose and drive. Nothing else matters but the words of the voice. The path I must travel is obvious now. When I get there I will need to do more.

This is clear.

This is certain.

This is the way of things.

I know not who I am. I know not where I come from. Now that I have a purpose it is encoded within my soul. It is too late to stop now. I have spoken the words and I must obey. It is time to go. The process is calling me and all that is has now begun. I pray I will be provided the methods and means to safely travel my path.

I shall do what I am meant to do.

I shall be what I am meant to be.

The safety of the entire program is depending on my work. That is all I need know. I am awake.


Working With Internet Explo{d,r}er 9

Lately I’ve been working with Web Components in my spare time and recently I was moved to the Engineering group at 3Pillar. At work I have been challenged by the limitations of Internet Explorer 9 (IE9). Many of our clients still support browsers like IE9 and much of the corporate and government world use browsers that have been locked down to certain versions either because of the Hacker News propaganda and paranoia with security/privacy issues in browsers or just because ‘Big Brother’ said so. In fact, the corporate world seems to prefer the ‘security’ & ‘privacy’ of Internet Explorer. Many features in browsers that are not named ‘Internet Explorer’ are disabled and system administrators will sometimes lock down everything ‘just to be sure’. Internet Explorer itself gets locked down as well. Perhaps it is the “clear” internet options that integrate so well in their ‘secure’ windows environment.

Now that I am part of the Engineering group I have client work that has a real need to work with older browsers as opposed to the cutting edge prototype work I was doing previously with the User Experience group. It has been a while since I had to break out my cross-browser bug smashing mind and I was very excited that I did not have to worry about IE9’s cleverly named predecessor – Internet Explorer 8.

Some of the pain I encountered in IE8 has been extreme and frustrating to say the least. At first I compared it to IE7 and justified the abuse much like a battered victim would. After all, it supported CSS data-uri’s, I had no more float or double margin issues, hasLayout worked a bit better….I am sure there is more but that’s about the sum of it. IE8, like it’s father before him, had extreme issues with lazy loading and script performance. Internet Explorer 8 and older versions have been using JScript, which is a variant of JavaScript that is non-standard and proprietary to Microsoft. IE9 is the first of the IE browser family to use standard JavaScript.

Internet Explorer has had a history of CSS issues solved with expressions &¬† filter rules. These work but are highly toxic to performance. Rendering times are significantly higher when using these, so don’t if you can help it.¬† The most obnoxious piece of IE8 (and IE7) with regards to CSS are it’s request and file size limitations.

Internet Explorer 7

  • Maximum Stylesheet Size Limit:¬†288kb per file
  • Maximum number of CSS Stylesheets:¬† 30 files.

Internet Explorer 8

  • Maximum Stylesheet Size Limit: 288kb per file
  • Maximum number of CSS Stylesheets:¬† 30 files.

Internet Explorer 9

  • Maximum Stylesheet Size Limit: not tested yet
  • Maximum number of CSS Stylesheets:¬† 30 files.

Internet Explorer 10

  • Maximum Stylesheet Size Limit: not tested yet
  • Maximum number of CSS Stylesheets:¬† not tested yet

Other limitations that are less significant with regards to CSS are the rule counts, import counts, and import nesting levels. While these numbers may seem unreachable – consider the misuse of CSS Preprocessors on a team of 20-30. It has happened before and hopefully we are now writing CSS in a style like OOCSS or SMACSS to avoid this.
Internet Explorer 6-9

  • A sheet may contain up to 4095 rules
  • A sheet may @import up to 31 sheets
  • @import nesting supports up to 4 levels deep

Internet Explorer 10

  • A sheet may contain up to 65534 rules
  • A document may use up to 4095 stylesheets
  • @import nesting is limited to 4095 levels (due to the 4095 stylesheet limit)

The worst part about these limitations is that no errors or information is sent to the users. In fact, when Internet Explorer parses a CSS file and reaches its maximum kilobyte size, it just stops parsing it. The request is still a 200 but suddenly some CSS rules are missing. When minifying and concatenating files, as current best practice would probably warrant, this becomes a debugging nightmare unless you know that these limitations exist.

IE9 has full support for SVG (Scalable Vector Graphics)! Prior to IE9, the browser used it’s own variant of SVG called VML. Charting libraries had limited support for VML so this is great that SVG is finally native in IE. IE9 also has full CSS support for Media Queries but that only includes CSS rules. Keep in mind that the JavaScript “window.matchMedia” method does not work. IE9 does not support “Element.classList” which is frustrating if you don’t want to use JQuery. IE9 does have partial support for Viewport Units which is helpful but not as flexible as we need. Pointer Events require a polyfill as they are not supported as well. Combine that with bugging CSS Appearance rules and styling form elements still sucks really bad. As far as layout goes, I have had no luck getting Flexbox polyfills to work in IE9 so “display: table” or floats seem the only semi-sane way for go. IE8 and IE9 have issues with cross origin resource sharing & CSP as well. The typical scenario occurs with icon fonts from Google Fonts are not loaded but cross domain issues are not limited to this particular case. IE8 & IE9 get buggy partial support for this using ‘XDomainRequest’ and the majority of polyfills require you have access to the origin server…gee, that’s useful.

To Sum up…IE9 IS the new IE8. Like IE8, it adds a huge amount of development overhead when developing for rich and performant applications. Consider burying it alive if you can. Here are some tests to visualize some of the CSS issues.

LifeCycle Callbacks in Custom Elements

I was going through the HTML5 Google Community posts a few days ago and saw Max Waterman had asked a question about¬† Custom Elements. I thought I could easily answer this one, so I did. Interestingly enough I learned a bit more as I answered the question. When I was going through code in the console to test I noticed a few things I hadn’t before.

// namespace for custom elements
var customElements = {};

// create a JavaScript object based on HTMLElement
var registeredElementProto = Object.create(HTMLElement);

//add a function to registeredElementProto = function(){ return 'foo'; };

//add a property to registeredElementProto  = 'bar';

//add a createdCallback
registeredElementProto.createdCallback = function(newBar){ = (newBar ||;
console.log( +;

// add our element to the DOM registry
customElements.fooBar = document.registerElement('foo-bar', { prototype: registeredElementProto });

Alright, this looks good so now I will add a instance of my element to the DOM using it’s constructor. Should be simple enough, right?

var myConstructor = new customElements.fooBar("Baz");
constructor error from custom elements

constructor error from custom elements

I spin the wheel and I can hear the sound of Pat Sayjak laughing at me as the spinner lands on a ‘Bankrupt’ space. What just happened here? Let’s take a look at the Lifecycle Callbacks a DOM Element. These are functions that are fired internally by native code but can optionally be redefined.

HTML Rocks description of Custom Elements

HTML Rocks description of Custom Elements

One thing that was unclear to me before was whether or not you can override these callbacks to take parameters from the element constructor.¬† Keeping in mind that “createdCallback” is not the actual element constructor I would guess that it is most likely just a simple callback fired by the containing element constructor. I would hope something similar to this might be the case.

constructor (arg1, arg2,...){
// main constructor logic
this.createdCallback.apply(this, arguments);

If I update the first code example so that I inspect the arguments of a redefined ‘createdCallback’ I see that no arguments exist. Notice I am adding an argument reference as well in ‘fooBarOne’ and no arguments in ‘fooBarTwo’.

// ...

//add a createdCallback
registeredElementProto.createdCallback = function(newBar){
console.log("args",  arguments, newBar);
// ...

var fooBarOne = customElements.fooBar('myArg');
//-> outputs TypeError: This constructor should be called without arguments.

var fooBarTwo = customElements.fooBar();
//-> outputs to console "args [] undefined"

I can see now that ‘fooBarOne’ outputs a type error “TypeError: This constructor should be called without arguments.” and as I would expect in ‘fooBarTwo’ the output in the console is an empty arguments object and the ‘newBar’ argument is ‘undefined’ even though I tried to override in the callback signature. Based on this, I would bet that when we define custom elements, the native code constructor will not recognize any arguments passed in and therefore even if redefining my callbacks with parameters and my assumption that callbacks would apply constructor arguments, the constructor never allows arguments to pass into the HTML Element anyway so nothing like this could work.

I guess it makes sense though since custom elements can also be constructed using ‘document.createElement’ which takes only only parameter which is the name of the element which happens automatically when calling “new ElementName();”. I’m a bit naive to browser development but I would guess browser developers would have to either redefine ‘document.createElement‘ and HTML Element constructors AND make it all backwards compatible, or they would have to further clutter DOM manipulation with a new function ‘document.createCustomElement’ & change the internals in the JavaScript ‘new’ constructor for HTML Elements as well.

Writing Again

Blogging Inspirations

Since I started at 3Pillar Global over a year ago, I feel an overwhelming sense of freedom and a strong desire to learn & share with others in the community. It has been wonderful this past year & I appreciate it more because I wasn’t allowed or able to do this at some previous work places. My trusting nature actually led me to one place where months later I found out my contract even had it fine print that anything I did outside of work related in any way to software development belonged to them.

I love that I can pair program on my lunch hour or speak at a conference on a topic I am interested in. More than that, 3Pillar encourages, promotes, and support it. Although I speak at meetups & conferences, co-host & manage The Web Platform Podcast (@TheWebPlatform), and co-organize a monthly developer hangout,¬† I rarely write blog posts anymore. It is strange to me that I don’t write as much because it one of the most effective ways to distribute searchable information.¬† I keep starting to write some posts and then I never complete them.

I recently had the pleasure of interviewing two incredible developer thought leaders on the podcast. Pam Selle (@pamasaur) who writes on The Webivore and Chris Storm (@eee_c), who writes on japh(r) both are amazing leaders in the development community and incredible content authors. Inspired by them, I’ve decided to start writing again. In the past blogging has taken up an exorbitant amount of time and has yielded me very little content in return based on that effort. I hope to write more often now and I hope to become better at it.


Every day I can expect a new post from Chris on Polymer, Dart, or some project he is tinkering on. Every single day I see the notifications on Google+, Twitter, and Email on new posts. I used to find it amazing how he found the time for it all. It wasn’t until I spoke with him about blogging that I realized writing for him is an integral part of his own personal development process. Despite the fact that his content is so relevant, current, and useful to me in my own explorations of the these topics, they are primarily for his benefit and not for the community first. Chris is far from a selfish person. On the contrary, I believe this is the great approach to writing in many ways.

Based on the many posts I’ve read, Chris is interested in many complex & ever changing development topics. On the idea of being referred to as an “expert”,¬† Chris has said “Someday I will give this more thought, but I think things change too quickly to become what is traditionally considered an expert. I like to think of myself as an advanced beginner in all things who is getting good at asking and answering the necessary questions” I like the term “Advanced Beginner” and always keeping an open mind because technology changes so quickly. We can allow ourselves to “unlearn what you have learned”, as the mighty Jedi legend Yoda once said,¬† and immerse ourselves in the joys of discovery with an open mind and heart. the challenge in this is that we rarely have a structure to learn with and it is easy to lose interest, become stagnant, or become overwhelmed by stress. Chris has created an interesting process to alleviate this.

He has set achievable long & short term timelines & goals for himself similar to Agile development project planning. Every night Chris has time set aside that other developers who want to pair program can help him on the ICE Editor Github Project which is primarily intended to help kids code JavaScript. These pairing sessions are usually an hour long and rarely yield content for his blog but occasionally they assist his posts related to Polymer mostly because the editor uses Dart and Custom Elements.

Chris’s writings are honest, fresh in his mind, and detailed. He isn’t going to write a post just because some ‘hot topic’ is what other developers want to hear. Second, because he is writing every every night, his posts are usually very short, small scoped, and easy to follow. His posts tend to build on each other, providing small explorations that lead to large discoveries and usually get rolled into a larger compilation or book later on. By Chris taking the initiative and time to become an “Advance Beginner” in these areas & chronicle his own work the community benefits as well in that he has made his research public and accessible to us, the community at large.

The Webivore

Pam Selle is also a very regular & honest writer. She writes how she feels and says what she likes as she likes it and I can really appreciate that as a reader. Pam’s writing is similar to Chris’s in that she writes a lot what is happening in her work life. Her approach is a bit more raw an not as research focused.

What I really like about Pam’s blog is that I never know what to expect except that it will be honest and uncensored. As a reader, she makes you feel as if you’ve known her for a long time. Many posts will be short and informational on events Pam is attending which is good to see, but I also really like the gems like her post “My Problem with Pairing“. This is a very short read and it tells a story with emotion and it makes me think about my own experiences pairing. I love this post. When I can read something like this and days later I’m still thinking about it, spawning questions and churning with related ideas, I begin appreciate it even more. After reading this and listening the Turing Incomplete podcast episode on pairing I was thinking about why I don’t write as much anymore.

Perhaps in writing shorter, more focused posts that are published more frequently I can make it a habit and work towards becoming a better “Advanced Beginner”.

Concierge UX : Part 3 of 3

This Black Friday I decided to do some research online in an effort to find a digital equivalent to the brick and mortar Apple Store Genius Bar experience. In¬†Concierge UX : Part 1¬†I¬†described my experiences in navigating through Apple’s website and the challenges I faced on that Black Friday.¬†Concierge UX :¬†Part 2¬†of this blog series focused on personas and who might use a Genius Bar Experience online and what their needs would be. ¬†To conclude this series I wanted to compare a few other online support experiences I looked at, a summary of the overall experience I ended up with on Apple’s website and what I was hoping it would become.

The Answer Desk

Microsoft now has an experience in their retail stores known as the ‘Answer Desk’. Immediately after finding the landing page for the Answer Desk online, I was able to quickly contact a live person in just a few steps¬†but the experience was still not even closely comparable to the experience of visiting a physical Apple or Microsoft retail store.

The Microsoft Store Answer Desk

Figure A) Microsofts attempt at a online Genius Bar experience

A Bucketed Services Approach

It was promising to see an option to chat with a live person¬†but scrolling down I noticed a vague short list of broad service offerings and pricing. How did the Answer Desk already know what my needs were? I may have not even known what my problems really were. How could I, or anyone for that matter, place a price tag on a technical solution without even understanding the problem? This brings me back to the IT online support techniques of old, where you would get asked questions like “Is the computer on?” or “Have you rebooted yet?” to further define the problem. In 2000, this seemed like a logical approach to go through a series of questions based on previous issues IT support encountered. ¬†Those questions are no less important, but it is almost 2014. The approach, the questions, and how we understand technical problems has changed so much since then. Today, with the vast amount of new devices, varied operating systems, and extremely diverse user needs it is no longer viable to just drop every problem into a limited set of technical solutions.

Answer Desk Offerings

Figure B) Answer Desk Services were very generic and defied the actual purpose that the Answer Desk aims to serve

That was a red flag to me that this experience was not going to be as face-to-face and humanistic as I would like. A concierge experience is not about a rigid limiting set of services but is about fixing what you need when you need it so you don’t have to worry or stress about the little things. Whether that means helping synchronize your personal calendar on your iPhone with your work calendar in Outlook or removing viruses on your PC, a Concierge is ‘in your corner’ and is invested in you, the person, and not necessarily invested in you, the client.

The Contradiction

A Good Definition of Concierge UX

Figure C) Microsoft Answer Desk seems to well define the general goals of Concierge UX

What was interesting about Microsoft’s case was the set of defined qualities of ‘Greatness’ for the Answer Desk, which were located directly below their technical solutions offerings. These qualities were well aligned with what would be considered good Concierge UX. Clearly, the bucketed technical support solutions directly contradicted the technical solution idea. (See Figure C). This could be seen in the text for the last section in the “What makes the Answer Desk Great”, which states “We know not all tech issues are the same”. If this is what makes The Answer Desk truly great then why had Microsoft ‘bucketed’ their services in such limiting topics? Every problem would need to fall in one of those buckets and be given the same value because of its predefined cost estimation.

Covering Their Bottoms

By saying that the Answer Desk would “customize our training and support services to meet your unique needs” ¬†felt like legal speak to me. The Answer Desk would definitely solve your problem, provided it fell into one of their ‘buckets’.

Generalizing the Bucket Approach

I knew, from a hands on experience at other companies, that with this type ‘bucket service’ model a ‘customized’ solution most likely meant the IT Support team would use internal canned virus and spam elimination tools. Those tools ran generic tests and fixed the problems as they were detected – Automatically. Very rarely would you have a personalized approach in a scenario like this. In many cases the real problems were never solved to level they needed to be and the customers ended up returning for repeat business.

Establishing Trust

Regardless on my opinions on ‘bucketed services’, I was much more concerned with how the live chat would be.¬†I was rather happy for a few reasons in starting this part of the Answer Desk experience. First, I was able to chat in a fraction of the steps it took me on Apple’s site. Second, a live feed of Answer Desk support people was in front of me on the page with complete ratings, a profile photo, and ¬†skills they held (see Figure D). The skills were limited by the main service bucket but still it was a human that I could now have some visual recognition with as well as some establishment of trust (whether this is illusionary or not the the psychology of this still holds value).

The People at the Answer Desk

Figure E) Here is a more human view of online support and the people at the Answer Desk

Chatting with The Answer Desk

Now I could choose who I wanted to wait for or I could just chat with the next available person. I chatted with one of the Answer Desk People very quickly (maybe a 2 minute wait) and immediately asked about video conferencing or more personalized methods of collaborative help. Once a chat was started I did have a link where the Answer Desk person would call me instead of chatting. This was a nice option to have but I opted to stay on the chat anyway. Compared to the online chat with Apple (read about that interaction in part 1), I felt even more disconnected here in this chat. I had to wait for responses with no indication that the technician was still there.

My Answer Desk Chat

Figure F) The beginnings of my Answer Desk Chat

The Same IT Support Service With A Different Dress

I explained to my Answer Desk Technician that I was a developer looking for online support solutions at a Concierge UX level for a client. My questions were answered in an even more canned manner than that of my experience with the Apple Support Person (View Part for details on this). For instance, when I asked ‘yes’ or ‘no’ questions there was no conversational text as Apple had provided when answering these questions. When I asked an open ended question such as “Can you talk to me about your video conferencing support options at the Answer Desk?”, the delayed answer was “Yes we have video conferencing but it is a paid service”. ¬†I had to ask several questions before I could stitch his answers together before I was able to get a clear understanding of my options. ¬†Additionally I pressed for more public material or marketing that I could later review with my client. That was when the inevitable IT “This-is-not-my-department” answer came (See Figure G).

my conversation

That really showed me this was a true call center with a detailed script and no personalization on the level I required. When thinking of Concierge UX, this is a feeling of betrayal of trust to me. My technician had his own or The Answer Desk’s agenda in mind here. More importantly, he was not in ‘my corner’ and not on MY agenda.

History Repeats Itself

Remember the big box company CompUSA? I used to work at one in their tech support store offering. They took a similar but less refined approach that BestBuy and Microsoft are doing now. Customers would bring in their machines, fill out the paperwork, take valuable time out of their day while waiting for a tech to fix their problems. Sometimes problems took days or weeks to fix. You, the client, would be charged a good amount of money for a limited set of services. This service hardly ever got good feedback or reviews from the clients. Where is the giant CompUSA now? Well…they had fallen into bankruptcy at one point and a few retail stores still exist I believe but not a fraction of what they once had. Eventually they were consumed by TigerDirect , a major online retailer. My point is that this approach in the short term may have worked for them but look how successful it was in the long run.

The Beginnings of Concierge Innovation: Enter Mayday!

Mayday was the latest Amazon support service I had looked into. I didn’t get to personally experience this but I did find this video from the Android Authority (as seen above) where they ran through the service and its features. This video was not as glamorous as Amazon’s marketing video but you got a much better idea of what the first hand experience might look like. Keep in mind that this is just the beginning for Mayday, and as of writing this, the service is only available on one Kindle device. Additionally, a few things stuck out to me.

Very Fast Turnaround

Amazon boasts a 15 second turnout to get assistance

One Way Video

Something I had not clearly understood from the marketing video I watched from Amazon was that the person assisting you at Amazon cannot see you or your surroundings. This is so key to establishing trust and personal security boundaries. Imagine a Mayday attendant sees you have valuables on your fireplace mantle, notices the lock types on the windows, what the layout of your home is. Call me paranoid but that could end badly.

Personalized Guidance

Having done a good amount of remote pair programming I saw great value in having both parties able to manipulate and view the screen I am looking at. The fact that I, the user, can still control my device but so can my attendant on the other end at Amazon makes learning fast and easy. If I am in a hurry and I don’t want to learn (some people are silly like that) I can ask my Mayday assistant to take over.

High Level of Established Trust

Although Mayday attendants have a set of rules and a script, they need to look at the screen & maintain their attention on you or your screen. Now that you have a face to their name they know you will remember this conversation. I am sure these are recorded for Amazons internal use as well.

Holistic View of the Experience

I would imagine, and hope, that because of these intertwined dependencies that the Amazon Mayday technical assistance will evolve into a full fledged Concierge User Experience. This would be an experience that not only helps with your Kindle but now leads to much more outside of the Mayday video conference. It may start with questions like “How do I connect my iPhone to my Kindle to transfer files?”. Maybe now we are thinking bigger and are having broader conversations like “I need tickets to a baseball game in New York next month. Amazon friend, can you find whats available with me and help me order them?”.¬†At that point we are talking about collaborative task management and device integration but it can be much more than that. This line of questioning shows clear examples of how Mayday could grow but what if we had this as an open platform and we took it a step further?

Back to Apple’s Genius Bar

The more I navigated through the maze of Apple’s online support experience, the more I realized I was not going to find the same experience. I didn’t even come close. The technology is here and available today so why on earth would Apple not want to scale this experience? Now that I have tested many of my previous assumptions of what I thought I might experience online I am left with more assumptions and less answers. Sure, I know what I enjoyed from the in store experience and I know a few ways how I might translate and scale that digitally but why haven’t smarter minds than me at Apple figured this out?

Has Apple Secretly Tried this Already?

My revelation is that Apple had already figured this out a long time ago. Whether it is for internal political reasons, poor ROI estimations of such a product, or some other reason, it has purposefully been buried under the the global support system in Apple. Not only that but it is an experience that only points you to a visit to your local Apple store or customer service via phone or chat.

Why Not FaceTime integration?

Interestingly enough, from my conversation with the Apple customer service rep, I forged a hypothesis that the online Genius Bar experience I desired was non-existent. In fact the only video support available is obtained when you call customer support on the phone and specifically request video support with them. Then you would have to use Safari and login to some web application and supply they would provide a URL. To have a FaceTime video or any video conference to the degree I would have expected from a concierge service was not possible.

Technology & Video Conferencing

With live video conferencing you get the auditory inflections & nuances along with the visual facial cues of being right next to someone. Of course you don’t have the smells with video but I could be persuaded to do without that. Video and audio can also be choppy, dependent on connection speeds, sounds get muffled, and direct eye contact sometimes get lost depending on where the camera is.

First Generation Innovation Leaders

A Mayday-like experience would be the closest experience one would have online right now that would be the closest to an in-person visit to the Apple Store Genius Bar. Amazon seemed to get this concept and they were way ahead of Apple on the digital front. I kept wondering if Apple was purposeful avoided a digital translation of their Genius Services? Perhaps internal politics? Maybe it was because of the technical problems video conferences tend to suffer from? Perhaps it was a staff issue related to scaling or quality assurance consistency. It was clear that Amazon had broken ground with the Mayday online experience and Apple was dragging its feet.

High Expectations?

Perhaps I had expected too much from Apple, or a Concierge UX online service in general, as I envisioned it. I did have very high expectations compared to the solutions I encountered. A concierge experience like the Genius Bar would inevitably evolve online. The online customer support space had been in need of something like this for a long time.

Amazon & Apple

Apple had mastered its rigorous recruitment criteria for Geniuses. They had solidified the marketing, training, and branding needed to attract & retain quality people at the retail store level but nothing exceptional was being done online. Amazon had no need for what Apple had done in their retail stores because of the obvious amount of their revenue that comes from their online presence. Amazon had stolen the show in the digital service space. What if Apple and Amazon combined forces to create a consolidated online experience integrated with a brick & mortar retail? Imagine what these two powerhouses could accomplish together.

The Endless Possibilities

Innovation Today

Now that we have established the online experiences of Amazon & Apple, let’s think about how to take those experiences one step further. Recently I read about the Microsoft Surface Blades. These are the Surface accessories that physically snap into and extend the interaction of a Surface tablet (Read the article here). Blades are no longer just keyboard input devices. They are now custom physical extensions for workflow and daily routines.

It is now apparent that product development professionals are not only thinking¬†“outside the box” but now “outside the app” as well. These types of innovations are opportunities not just in technology but also for normalizing user experience. Thinking ‘outside the app’ ¬†extends the concepts of Concierge UX to a whole new level.

One Possible Future

Imagine visiting your doctor through a Mayday like experience. Rather than travel, you could visit a private space nearby, ¬†turn on your tablet and touch your ‘Doctor Contact’ button. Now you would be immersed in a one-on-one human experience without having to take time to go into the doctor’s office. Some questions come to mind like ‘How would the doctor check my general health, my reflexes, my blood levels, or even perform a procedure?” What’s to say the medical tech community couldn’t build out physical objects that integrate with the medical systems through your personal device. Objects like that could become typical household items like first aid kits are today.

If you needed a simple blood analysis – not problem. You just put this ‘arm-analyzer-device-thing’ to your arm and it will transfer the data to the doctors systems through your tablet. After analyzing the blood, they review the results and send a prescription to your local pharmacy of choice.

Maybe your other ‘muscle-analyzer-thing’ the doctor asked you to put on your back could be used for muscle and bone analysis. ¬†It could determine¬†you needed a custom back brace to a certain specification.¬†No problem, your physician just sends your 3d-printer what it needs to know based on the data they received and you don’t even have to leave your home to get it. Sounds like science fiction but its not as far away as we think.

Concierge UX : Part 2 of 3

Apple Genius Bar Personas

An Approach to User Research Requirements Gathering

This is the second of three posts that are about user experience for concierge services like the Apple Genius Bar. In this post I look at a few different personas of the Apple experience that have specific goals in mind. I have identified a few possible personas that might navigate through Apple’s website trying to get personalized help:

  • A Parent setting up their 12 year old daughter’s new iPad Mini
  • A ¬†visually impaired developer looking to get Siri training and help with ‘blind mode’ on their iPhone 5
  • An on-the-go young tech savvy visual designer needing help with internet connectivity on their Macbook Pro

Persona 1 : The Father Who Spoiled his Little Princess

Spoiled girls with iPads (linked from

* See disclaimer

Mr. Jones is a middle aged father that has a wonderfully spoiled 12 year old daughter that badly wants and iPad mini. In a effort to buy his daughters love at his local mall and after hours of his daughter begging him to take her to the Apple Store, he ultimately had forked up the cash for her brand new iPad mini. Although Mr. Jones is fairly knowledgable in computer technology, he knows very little about tablets or smart phones.

After his daughter opened up her new tablet, she invited all her “cool” friends over to show off her new toy. Just minutes after that, she instructs her father that he will get the mini working for her right away and it has to be before her friends get to their house in an hours time. Daddy happily agrees and gets on his personal laptop, navigating in his browser to the Apple store online for assistance.

Persona 2 : The Blind Engineer getting acquainted with Siri

Photo of a blind women using an iPhone (Linked from

* See disclaimer

Kathy, a legally blind web developer, has a good amount of upcoming contract work so she will need to use a smart phone to keep in constant collaboration with her clients. Her  macular degeneration has caused her vision to degrade to the point where she has difficulty seeing details. Despite this, Kathy is a master at typing and is still able to use her computer although in some cases she requires the use of a screen magnifier or her screen reader, Jaws. She recently purchased an iPhone for her contract work and has been interested in getting some face-to-face training on Siri and the accessibility features on her new phone. Kathy has already read the Apple manuals online but is still not getting the workflow she desires from the iPhone experience yet. Since she works remotely and living a great distance from a physical brick & mortar Apple Store she requires either a IM chat session, phone assistance, or audio conferencing to get this help.

Persona 3 : The Visual Designer working from Starbucks

designer working from starbucks (linked from

* See disclaimer

Kenneth is right out of school. His impressive design work has caught the attention of large companies and he is currently working on redesigning the Washington, D.C. Metro Train System’s visual design and branding for the train ticketing machines. This is a huge undertaking and it requires him to do a lot of travel on the train as well as heavy user research for his designs. Kenneth is working with an agile development team in Fairfax, VA and needs collaborate with them on a daily basis so connectivity is very important. One day, the usual wifi connection at his local Starbucks is no longer working for him. The coffee steward at the front desk explains to him that someone updated something over the weekend but nothing should change for the cafe customers. Connectivity seems to be working for other customers in the shop. Kenneth needs to contact Apple on his iPhone but because he is around a crowded area he has no desire to talk on his phone with a customer support representative.

Thoughts on Personas

Who are These People?

These personas are just a few I imagined. Perhaps the majority of Apple’s users falls into other personas. Additional research with Apple’s customer support and Genius Bar teams might clarify this to a better degree but the three listed above can really give us a lot to think about. Defining what a user may experience requires a balance between the right amount of research, great user interviews, people skills, and a little luck.

What do they want?

Each of these personas needs specific information from Apple’s support and they have specific criteria for how they want to get that information. The goals they desire are very concrete and descriptive but the context is very different. Imagine how each of these people might experience the Genius Bar on the phone, their Laptop, or some other device. Where do they start their journey? What is their motivation? What constraints might they encounter?

Mapping the Journey

My journey on the Apple site finished in 13 steps.  I was using my Macbook Pro in Chrome so my page load times were better than some other browsers on some other devices but if I were in a rush (keep in mind this was black friday) I might have left the site as early as step 3 (as seen in Figure A).

Genius Bar Search Results

Figure A : My Genius Bar Search Results – Make A Reservation implies that I will need to go into the brick and mortar Apple Store

As I stated, I may have been be in a rush but, to compound my problems, the choices I was presented were too many and too detailed in some cases. Although the visual elements tended to be large click/touch areas with icons paired with short & simple text, I still had to stop and think about these choices more and more as I went on. I initially desired a face-to-face personal encounter much like I had in my local brick and mortar Apple store. A video conference on FaceTime with a Genius might just have been the thing I needed! I couldn’t help but wonder why I had to make all these choices when I could simply get down to the point quickly with a ¬†interactive Genius Representative in front of me. I was overwhelmed by the sheer amount of steps on the Apple site that I was taking to get from point ‘A’ to point ‘B’ and was not even sure where these technical support choices will lead me? I found myself thinking things like ‘what else is on this page?’ and ‘Was I choosing the right option here?’…I didn’t want to have to start over and if I chose wrong, would it be easy to get back to my last step?

Gaining Insight

Being an application developer and UX professional, I had a bit of insight into my own experience and had some clear assumptions to go on. I had to keep in mind that these were only my biased opinions and I needed to quickly validate or invalidate them before I could make any decisions on what the real challenges of providing a scalable concierge online services would be or what might be a better experience. I imagined how each of the personas I had defined might have felt while trying to get the information they needed. Research & testing on as many different users and personas as possible could determine better ways to experience the Genius Bar in a digital universe but more importantly give insight into what the experience provides and doesn’t provide to its user base.

Collaborative Ideation

Collaborating with other UX professionals in understanding this data can reveal possibilities that by myself I may not see right away which is why I love working in groups. Every professional in a product team comes from different experiences and ways of thinking. Exposing my research data to as many viewpoints and interpretations as possible can only give me a broader understanding of of the user experience. A given persona may need a real-time communication application, a holistic knowledge management solution, or a Teleportation device. It is near impossible to say until you get the facts out of the data and determine what is real and what is tangential.

Defining the Problem

Rather than suggesting a product that would define what our solution would be, it would make more sense to define the problem in a clear high level and then apply several solution ideations. How might approach this? For me, I usually create a outlined rough script that has open ended questions helps manage my assumptions. ¬†Based on the answers to my questions I try to understand what these people are thinking and feeling. ¬†It’s important to see not just what a persons says they would do or what they do, but to also understand why they do these things. Emotion and thought process can sometimes be inferred with the right questioning and collaborative data analysis.

Connecting the Dots

Looking closely at repeating patterns and key points there will most likely be a much more accurate idea of the high level issues these users have. It would be my hope that I would have enough information to create a definitive problem statement that would either lead to the possibility that a Genius Bar experience online is not something I want to build as a product/service or reveal many possible product/service solutions. What were the core problems that overlay across our personas? For UX professionals, understanding these core problems keeps us on track and help to maintain focus on what is necessary to create something that has real meaning, value, and purpose.

* Disclaimer
Photos are just links from,, and to get a high level visual representation of what the persona may look like. Names and details of the personas are not actually correlated in any way, shape, or form to the people in these photos. Any coincidental information is just that….coincidental.

Concierge UX : Part 1 of 3

Holiday User Experience

During the holidays a good service experience goes a long way. People tend to get visibly agitated and stressed out for the smallest things during these few months. Retail and Service establishments put so much pressure on employees in regards to sales and expected work hours. It can be overwhelming for many employees and for the guests that shop at their brick & mortar establishments. It is inevitable considering the amount of revenue companies typically need to acquire within that short time. Application developers in sales-focused industries feel this pressure in a different way. They don’t have that face-to-face engagement but they get the pressures of last minute features, production server issues, traffic surges, minimizing downtime, and getting quicker checkout experience with less drop off in the early cart entry to name a few.

Most notably good user experience tends to suffer. Research & Development (R&D) rarely hears about the good experiences. Typically it is the uncensored ravenous rantings of dissatisfaction that rolls down to R&D. The face-to-face experience is lost with a mobile or web application. For online reviewing, sales, and support people are not afraid to speak their minds and in some cases be cruel & abrasive. The people who built the application are out of mind and out of sight to the shopper. Reviews and dissatisfied comments are what usually rolls down to the product engineering team. Many are in the realm of ¬†‘I-will-never-come back-here-again’ threats accompanied with ‘I-will-spread-the-word-of-my-hatred-to-all-I-come-across-forever’. ¬†This vengeful holiday spirit is exponentially true in the large and mid-size companies and their public facing service and e-commerce applications. It is the responsibility of everyone on a product team to make the experience of these applications the best in class. This is especially true for both the User Experience group & ¬†the engineering group since they are usually responsible for defining and implementing the design and vision of the product.

Concierge Service

I think of this holiday pressure often and find myself very critical of my shopping and support experiences. When I think about¬†the best support experiences I’ve had recently I think of the brick & mortar Apple Store Genius Bar. ¬†The reason this sticks out to me is not because I am a Apple fanatic but because it is a personal and concierge experience. I always feel like I have been personally taken care of when I leave the Genius Bar no matter how long I’ve had to wait. The main reason for that is the engaging personal interaction and the rapport. Geniuses, Apple store concierges, establish trust and personal loyalty early on in their engagements. The Geniuses at Apple are trained masters of customer service practices but they also have a very high level of social engineering skills in a ‘White Hat’ sort of way.¬†Other companies seem to be adopting this ‘concierge model’ and making it their own such as the Microsoft brick & mortar stores. It’s a very effective means of gaining customer satisfaction. Wouldn’t it be great to have this experience without ever leaving the comfort of your own home? Let’s take a look at the current Genius experience online. How does the Genius Bar experience scale and translate to a digital format?

A Digital Translation

The IPhone Apple Store App was the first place I viewed the Genius Bar experience in a digital format. One observation I made was that the app does not have a high level navigation element pointing to a Genius contact or even a information page for that matter. In fact, by means of browsing, one needs to first use the store locator, then touch the Genius section to make an appointment and a series of sub pages follow to make an appointment locally at a store. A search in the app yields no indication of where the a Genius type section exists or how you would have that concierge experience online.¬†This IPhone Apple Store App experience left me wondering what the online desktop web application experience would be. My first instinct was to go to Apple’s website and look for Genius information there. I would think that the home page would showcase the Genius bar Experience at some level. The home page had nothing mentioned about the Genius services at all. At the top level navigation, I clicked the link to the main support page for Apple hoping for some better information. Still nothing on the Genius bar. At this point I decided perform a global search using the search box in the top navigation using the key words ¬†‘Genius Bar’. ¬†The first result is a Genius bar logo accompanied with descriptive text and a link to make an appointment with a retail store. After I click on the link and run through a series of screens I ultimately get online help ¬†in the form of a chat with an online support person about customer service options for Apple. This digital experience is a very different and disconnecting experience in contrast to the physical brick & mortar one I am used to.¬†A few things struck me as odd with this experience.

My 13 Step Journey

User Flow for Genius Bar

Figure A : My 13 Step User Flow to get to a Live Chat with Support on the Apple Website Apple

Exploring this diagram we can see that it took me quite a few steps to get to a real person. Even when I did get a customer support technician, it was a chat (only a two minute wait on Black Friday though). My point is that the experience is not one of warmth and personal touch as you get in the Apple Store. Don’t get me wrong, the technician I chatted with was very attentive, professional, and polite. I know from experience that these are usually well trained customer service people working in a data center somewhere with a script of things to write, and how to word them. This is not a bad thing per se but not the experience I would have expected based on my concierge service at the Reston, Virginia store Genius Bar.

The next part my journey led me to think about the personas that visit the Genius Bar and how they might utilize a digital experience of similar value. I will post my observations in the next few days.

The Persecution of JavaScript

JavaScript’s history is a colored one of misuse and misunderstanding. It has evolved into a platform that, as of today, is arguably the most approachable, portable, and versatile programming language available. A former colleague of mine recently showed me an article claiming 10 reasons why you should not use JavaScript. JavaScript, like every language, has its strengths and weaknesses, but what is interesting about the article shared with me is the naivety behind it. Comparing JavaScript to languages like Ruby, Go, and Java is like comparing a hammer to a power drill. Each tool is very useful but each is better suited to solve certain types of problems. Developers have learned from their own experiences how to approach certain problems with their language of choice. What we forget sometimes is that we must not assume another language approaches this same problem with the same tools, patterns, or paradigms. That said, let’s look at some claims from the article in question.

The Assumptions

JavaScript hurts your mobile visitors

I am assuming this refers to performance and usability based on a comparison of HTML5 web applications to native applications. When running web applications on mobile devices they are restricted by a few factors.The rendering pipeline limitations of the device, the speed of DOM interactions and degree of GPU acceleration all contribute to performance. JavaScript, like many languages, can always be optimized for mobile performance but is by no means even close to being a major performance problem. I can agree that less lines of code per request helps to “lighten the load” but to say the Phone Gap article bashing JQuery Mobile is referring to all JavaScript is just not true. In fact, as the article title suggests, the post specifically refers to JQuery Mobile.

Many projects optimize web applications for progressive enhancement. One example is SouthStreet By Filament Group. They have taken several problems they see in modern web applications, especially in mobile, and have proposed solutions to these. As an example of one SouthStreet component is¬†PictureFill¬†. At a very high level it enables you to download smaller assets for less capable devices instead of the desktop high resolution versions through markup and JavaScript. This is a way JavaScript actually helps with progressive enhancement. Also, I recommend taking a look at Jake Archibald’s article on Progressive Enhancement. Jake explains “Progressive enhancement has never been about users who’ve turned JavaScript off, or least it wasn’t for me.”. He further details approaches to what he feels true progressive enhancement should be.

JavaScript hurts your robustness

The post talks about “a single bug in your JavaScript can break the functionality” . This is why we, as developers, use linters and testing. If you are pushing code that you haven’t tested in your application’s supported browsers then that is not the fault of JavaScript. Additionally the post argues that using JavaScript MVC frameworks couples your application and prevents testing future browser implementations of JavaScript. Projects like Chrome Canary and Firefox Aurora are extremely helpful if you want to test your code now in future implementations of the browser. This is also great because if you find a bug and submit it it will most likely be fixed by the time your users see it. ¬†One problem I do see with developers often is that they don’t test in their application’s least powerful target browser throughout the development time. That means bugs are not found early enough in the process. ¬†Testing early and often in at least the worst browser on the list will save so much pain in the long run. This is not a JavaScript issue.

JavaScript hurts your security (and your privacy)

We have all heard the horror stories of the evil hacker sitting in an abandoned shack somewhere in Portland hacking into our servers and sucking out our souls from across the the nine hells of the internet. Although JavaScript can be minified and obfuscated, a clever hacker will get your code if it’s there in the browser. While I agree that client side JavaScript has vulnerabilities in this area I do not agree that this should be the responsibility of the JavaScript language. Each browser allows JavaScript to access quite a bit of features. Without that authorization, many features of our applications we run in the browser would not be possible.

The fallacy in cyber security is that we are not protected because of JavaScript. It is true that a simple Google search will yield results that detail standard attack vectors using XSS and XSRF. Anyone can find step-by-step instructions and training videos on YouTube these days. Fear not, XSS and XSRF ARE preventable attacks. You can put countermeasures into your application on the backend to prevent this from hurting your users. As a general rule of thumb, don’t expose sensitive data in the browser where JavaScript has access. Server Side JavaScript has many more security options so storing sensitive data there is not an issue. Your backend, which might be JavaScript should always assume the browser can’t be trusted in these cases. On a related note – the real cyber threat is not JavaScript, SQL Injection Attacks, or even code hacks in general; It’s Human Hacking and the art of Social Engineering.

JavaScript hurts your SEO

Front End Developers seem to have a love for clean markup (I know I do). If you code your HTML semantically, separate your concerns, and use accessibility standards you can progressively enhance your page for robust functionality while maintaining SEO. Section 508 has been due for an overhaul but still yields some great practices that can optimize SEO. WAI-Aria attributes and patterns can progressively enhance your page for robust functionality while maintaining SEO standards.The big concern sited in the post was AJAX. Making your site functional without AJAX is sometimes an option but not always. This is not a JavaScript problem either as the language was not designed for SEO purposes nor claims to assist or hinder it.

JavaScript hurts your development time

Browser tools for Internet Explorer have come a long way. has a lot of testing tools for Internet Explorer. The new F12 tools are no Firebug or webkit debugger but they are getting there. Browser tools and even server side tools for Node.js like DTrace and TraceGl are extremely helpful. Using a linter and checking target browsers in the Continuous Integration and in development is extremely important. Unit testing and End To End testing for JavaScript is a necessity when building massive applications. Would you leave out testing in the backend of the application? Development time optimization comes with experience no matter what platform you are on.

JavaScript hurts your testing costs

If I understood this section correctly, “maintenance costs of testing” and relying on HTML implementations of browsers are the issues causing this ‘pain’. Testing is an quality investment, whether it is on the data layer, back end, or the front end. If you are testing the right functionality in your code and you are communicating what is being tested then testing is maintainable. This is a difficult and subjective way of thinking, especially in large teams where everyone has a different style if testing and coding. That said, testing code is a discipline and an irreplaceable tool to ensure better quality software. This is true not just for JavaScript but for all programming languages. As for setup of these frameworks you most likely need a browser matrix that you are targeting for your code so I get it that there is that dependency. Given that you are creating tools and applications with JavaScript that will run on those targets then it is no different than server side testing requiring environment and system dependencies. End-To-End testing is similar to integration testing on the server side. Whether you are writing unit tests or integration tests, ¬†we have bad tests and good ones. JavaScript is not an exception in this case but not at the fault either.

JavaScript hurts your website performance

Nothing hurts more than watching a client scream at an application you built that loads in 6 or more seconds. Premature JavaScript performance modifications are not necessary. If you are wealthy enough ( or have a client that is) to use a tool like New Relic, you may find that the page is waiting on the server from some crazy SQL call or a service end point that’s slow. Just because the browser takes longer to load a page doesn’t mean it’s the JavaScript that is at fault. When it determined a performance issue is on the client side, it’s usually bad coding practices. Restricting the amount of DOM elements, using spriting techniques, concatenating static assets to avoid vast amounts of server call are a few major contributors to better performance on the front end. Tools like JQuery optimize this and abstract out browser specific implementations but overuse of the DOM is not recommended. This is a failing in how the DOM is implemented across browsers, not in JavaScript.

JavaScript hurts your software investment

JavaScript is almost 20 years old now. It is now a proven platform for major application across the world. Applets and Flash require a plugin and are not the same as JavaScript. JavaScript is native to the browser.You cannot compare Applets to JavaScript. “Client-side technology is doomed to fail” is very presumptuous. I am not sure why you would assume JavaScript is doomed to fail since it has been widely adopted by large companies likes Google, Microsoft, Facebook, etc. I can’t even think of a company that has not desired to build a web application without any use of JavaScript.

JavaScript hurts your software architecture

First off I love MooTools but it is a abstraction of JavaScript. Underneath MooTools is plain old vanilla JavaScript. It is a bad idea to assume that backend developers understand how JavaScript works. Respectively, it is bad to assume JavaScript programmers understand how the server-side backend works and its complexities. JavaScript is flexible enough that it can emulate many styles of development. There is not a right or wrong way to code in JavaScript, only style and tradeoffs. If you don’t understand its paradigms and approaches to coding you should research and learn it.

JavaScript is not needed

This one I actually agree with this to a degree in some cases. For accessibility and Mobile First approaches we have a choice to to approach the application MVP with a semantic HTML version that has a minimal script tag to detect capabilities and provide richer experience in richer device targets. The rich functionality we see in applications is from JavaScript (and CSS) these days. Creating GMail without JavaScript is probably a bad idea. There are still things that can only be done on the client side. JavaScript is just another tool in the toolbox and should be used to create great software.

JavaScript is not perfect and it is definitely not the end of the road for application development. It is a flexible tool akin to a swiss army knife. It is powerful, portable, and versatile. and it has many problems it can solve and many ways to do them.

The Ruby Community and Education Today

I was listening to a recent¬†Changelog podcast on Ruby Off Rails. Jesse¬†Wolgamott spoke in detail on teaching Ruby. He found that when he ¬†tutored individuals on Ruby on Rails¬†many students were more interested in the Rails framework, which makes sense considering the market and jobs available. He went on to explain that when you are focused on a framework more than the language you ultimately end up doing yourself a great disservice. Rails is a great framework and it allows you to rapidly build massive projects but it is very opinionated and it does tie your understanding of problems to ‘the Rails way’. Trying to go outside this paradigm is difficult until you have a strong knowledge of the underlying language. Additionally things like creation of gems becomes less arcane when you understand Ruby as a language. It is rare that someone comes along who is an expert at coding and teaching. Jesse seems like one of those guys who knows his code and is easy to learn from.

Additionally, I was pleased to see that someone like Jesse is using a mentoring model similar in some ways to my experience on Ruby Learning. I am a perpetual learner and my learning journey with Ruby started about 3.5 years ago. The first project I was thrown onto was a monolithic Rails 2.x application with a team of about 30 or so developers. At that time I had never heard of Test Driven Development or Paired Programming and I had only started using Git a month prior to that. Fortunately I was surrounded by talented and experienced developers that guided me through the processes. It was such a productive and creative time in my career.

Prior to Ruby, my world was solely Design and Front End Coding. I understood static CSS,  JQuery, MooTools, JavaScript, and HTML. In this respect I complimented the Rails team fairly well and helped define the shape of the user experience on the project.  After learning CSS preprocessors like SASS, NodeJS, and JavaScript Testing it became apparent to me that my role on the team was an evolving one and I needed to know more of the full product development stack.

I ended up using Ruby Learning and I have to say that I loved it for many reasons.

  • It was structured and detailed
  • It was affordable
  • It involved Github and reviewing code transparently for the whole class
  • My instructor had passion and went above and beyond what I expected

You get a certificate too but I really could care less about that. The one thing that stood out to me from Ruby Learning was that my instructor, Victor Goff, was willing to get on Google Hangouts and pair program with me on the examples and projects we had. He would challenge me to look at the code differently and encouraged good coding practices. I wanted to learn more and be better. I found I was more focused when pairing and was more apt to take the ‘test first’ approach to the code. The total cost for this class was exponentially much less than I would imagine such a mentor would charge me for a single hour of training.

Ryan McGeary, founder of BusyConf, is another inspiration. His company has several interns now who are in high school. These guys are learning from him how to approach the business of development, how to program, market, solve problems, and contribute to the open source community. I recently reconnected with Ryan at a meetup¬† he helps run in Leesburg, VA. I asked him if he had been contributing to open source projects lately. His response was that he has been making at least one commit himself per day! My jaw dropped. Keep in mind that Ryan is a family man, he runs his own business, and he is a triathlete. How does one find the time? As Vader would say…..”impressive…most impressive”. What’s more is that his interns see that passion and dedication and learn from his leadership and initiative in this regard.

Rubyists like Ryan, Jesse, and Victor speaks so much about the Ruby community and what they have done for the education industry. The Education space has changed so much but there are so many opportunities out there to share and learn these days. Having taught graphics and development at tech schools I feel that the landscape has changed so much since then. Students used to be crammed into 8 hour classroom courses with expectations of learning products and skill sets in that short time frame. Over the past few years the teaching approaches and models to training technology has improved so much. I am excited to be a student again and these Ruby heroes have inspired me to get back to teaching in this bright future. Thank you to Ryan, Victor, Jesse and all the others who have helped shape this new frontier.