Past Web Programming

At BarnesAndNoble.com, I got a thrill from the challenge of implementing the user experience of our site. In each swoop of the mouse or click of a link, I orchestrated a complex flow of information – capturing the needs of the customer and funneling them into appropriate services and applications. While there were many ways to accomplish the goals that were laid out before me, my mission was to condense all that server power into one single, predictable dialogue with the customer. I had to stave off surprises whenever possible, and keep the responses to questions helpful and actionable. I truly only succeeded when the cascade of information is brought together in a harmony all its own. Under the axiom that complex is easy, simple is hard; it was my job to make shopping simple, all while awakening and propelling massive databases, search engines, and order-processing systems from just one button click, or just one input field. It was thrilling.

From the moment a customer triggers an event, it’s my code that determines what their intention is, where it should be directed, how many sub-systems should be involved, in what order, and then to present the results of it, all in a consistent manner. While coding, I envision the user sitting at their computer, interacting with my work, and I ask myself what they are thinking when they encounter the page. I try to predict what their reactions will be as each new line of the story is revealed to them. Is this the moment I should re-assure them? Is this when I should excite them, or draw their attention to a yet unknown opportunity? And to do it all with intention of building a relationship with the user, one of mutual gain, stability & trust. In the rapidly evolving world of publishing-ecommerce, I am not always able to get it right. But when a well-tended project is launched, and then widely adopted by customers, it’s one of the most satisfying aspects of my role.

I have worked on several projects of different scales and goals, each with their own special quirks, challenges and memorable achievements.

Refactoring and Reusing

The project I think I enjoyed the most was our pricing display initiative. As part of a program to introduce more competitive offerings and streamlining the number of price points we presented, I was asked to craft a template that implements the new plan on the disparate platforms across our site, and provide a single source of business logic where future updates will be made. This was no small undertaking, as the platforms that power various types of pages had evolved on different timetables over the course of a decade and handled product data very differently from each other. Furthermore, it would be inherently valuable to ensure that the template was easy-to-invoke by different developers working on these different parts of the site as well. The template launched and was deemed a successful refactoring of a range of pricing display issues, including turnaround time, consistency & reusability. But maybe the most rewarding aspect of this effort was the positive reception it garnered from my fellow team members. At the time it was rare to have such globally calibrated behaviors and I was relatively new to group, but it’s utility and clarity stood on it’s own. The code is still used today and it provides a single point of control for how we win over customers to choose to buy this item, now.

Deceptively Simple

In 2010, I worked to launch a new tool for our customers, a Gift Finder for best products for the children in their lives. This was the first project I worked on under a pursuit of an Agile approach to our processes. I found it very rewarding to be presented with the goal of developing in a self-organized team. We set the agenda, we set our own team expectations, and we resolved our own conflicts. It was a large inter-personal undertaking. The Gift Finder initiative was envisioned to allow customers to discover the most highly-recommended products for kids, based on the criteria of age, gender, and interest. It was up to us as a team to marry the product data from all the different sources – books, dvds, music, toys and games, and provide product managers and merchandisers the ability to control the recommendations presented. We also needed to allow the system to scale in terms of selection, stock-levels, and high demand in the coming holiday season. These features required reaching across many disciplines and to collaborate with other far-flung business-units. But the most difficult aspects of the project was determining where to set the goal post. The ultimate foundation for success proved to be a finalized set of features – and a recognition that our eagerness for a robust experience was tilting into the sand trap of scope-creep. But in the midst of all the churn there was a simple user-facing design. It contained just three simple questions – Are you shopping for a Boy, a Girl, or Either? How old are they? And what’s something they like? We’ll then present our best 40 recommendations nearly instantly. All the cross-database correlating, the custom caching mechanism, the complex product selection process – they’re all wrapped-up in a neat package that the user never needs to see. In fact, when I sat down to code the final design, I was taken aback at how simple the end result was. All that technology and personal investiment, and it all boils down to making it look easy. We took to calling it “deceptively simple”, it’s debut contributed to a doubling of Kids’ toys & games in 2010. It was a project prompting me to stretch and grow into a team leader for several initiatives focused on shopping for kids this past year.

Building Relationships in 10 clicks or less

The highlight of my latest work on the site was lunching the B&N Kids’ Club. This parent-facing experience is a hub of information and opportunity for customers to discover and purchase educational products and literature for the children they shop for. The club also features a loyalty rewards program that is available for online and in-store purchases. The largest challenge for me as a front-end programmer was implementing all the ways you can join the club into one clean & clear webpage. The team choose a segmented approach where interested customers with ‘sorted’ into two groups – those who had signed-up in a store and those who are joining online for the first time. This kept the initial welcome page to two uncluttered questions. Once the customer began heading down a path, we continued to hone-in on the specifics of their affiliation. Some will want to sign-up using their pre-existing B&N membership cards, and others will need to receive brand-new Kids’ Club loyalty cards. Some will have signed-up in a store with a handwritten form and will be looking to start receiving points for website purchases, while others will be looking to see their loyalty-progress form brick and mortar purchases alone. With all these variations, we worked to make each type of customer feel that the program was designed with them in mind. The sign-up rate has been more than double what the initial estimates had expected, and it proved to be another component in the increase of kids sales in 2010.

A big family

These projects and many more were built on a variety of systems – all having their own quirks, rich histories, and even their own personalities when coding them. I have found that the most successful projects were the ones where myself and others reached out the all teams involved in the process early, and built relationships early and sustained them beyond launch. While it’s ideal to have everyone relevant to a project in the same room, reaching collective decisions, that it’s not always achievable in a sprawling company in the midst of a reorganization I found that these non-agile projects hinge on fostering professional relationships with open, honest and upfront partnerships. At the end of the day, I usually learned more about the technology underpinning the site, but mostly I learned about the teams that create them. I wanted to know their needs, their patterns and goals, and how they can best help achieve the simplicity the customer needs. I am glad to say that I have avoided stepping on toes or running into conflict. It’s been a nice experience. I get to do all this in place of the customer – to give the customer the information and power of our systems, as if they themselves could learn to query our data tables, or move our libraries across a continent. I get to help them skip that process and get them closer to the knowledge they truly want faster.

A Multiplier Effect

The most important relationships I have discovered, are those with my fellow front-end developers. While reaching out to other teams is important, and learning about the customer’s behaviors is invaluable, nothing compares to the power of a strong group of peers – to learn from, to gain inspiration from, and to give back those same gifts whenever possible. This past year I had the opportunity to take a step back from customer-facing initiatives to spend part of my time creating an internal branching tool for team’s code. Prior to this, our coding, testing and deployment were performed sequentially, one entire project cycle after another – it’s a long story… but, I led development of a system where any front-end developer can use their own local copy of front-end code, on any of the many applications deployed across the development system. It was very rewarding to help free my teammates from having to wait for each other to complete a project, one launch at a time. With this new tool we’ve started to experiment in ways that we could only story board before. It was a great feeling. Now we code in parallel with a notable increase in team-productivity. And those same principles of simplicity applied here as well – the interface is straight forward and effective for my in-house customers too.