Let’s do it again

Racoon-headed man in a yellow jumpsuit looks at a tablet while sitting on the beach.

Thirty years ago, the Mosaic Browser was released. At the time, I was deep in the BBS- and gopher-land as a teenager. But it was absolutely love at first sight of the web. I think it was my now brother-in-law who first showed it to me. I’m pretty sure I went to the website for the UofT engineering department, where he worked (studied?) – not exactly thrilling stuff. While memory should be treated as an unreliable narrator I can still remember the frisson of seeing it – that sense that everything had just changed forever. I don’t think I have felt similarly about anything – until I used ChatGPT for the first time a few months back.

What seemed immediately obvious to me looking at a website; looking at the source-code behind it was that we had just changed the nature of the game. We had just democratized access to information in an irrevocable way: publishing, advertising, research – all of these things were previously gate by costs, by expertise, by monolithic corporate and government entities. I probably didn’t have those exact words as a teenager, but I understood it, and most of my early professional work reflected this: I built websites for not-for-profits, for activists, for small startups. We all worked fast, we made mistakes fast, we changed things quickly. We put our interests online in the public, we helped our friends do this too. If we couldn’t match the slick professionalism of traditional media, we would simply run laps around them by pace of iteration; and we did. The web in some ways is a repeated case of of a small early influencer changing the course of giants – and endless set of peas-in-mattresses disrupting the bigger things around it.

And, of course, we lost our innocence. As the web matured, and spread it inevitably changed, and with money, it centralized and stagnated. There’s more websites, there’s more internet than ever and it somehow feels more homogenous than ever, dominated by a few players. Kind of like what the world felt like in the mid-90s. [cue: old-man-yells-at-cloud]

My first conversation with ChatGPT was similarly mundane: I asked it to create some dialogue for a villain in a D&D campaign scenario. But the outcome was similar – that deep sense that everything had just changed – again. The pace of iteration likewise feels similar (although it is clearly faster), and it leads me to my main theory here: We have just democratized access to development in an irrevocable way: learning, building, advertising, writing, research – all of these are currently gated by costs, by expertise, by monolithic corporate entities. At the beginning of 2023 starting a company has simultaneously never been easier and never been more out of reach for most: all of our economic models reward hyper-scale and hyper-centralization. We have a few monoliths lumbering around and proactively destroying competition by buying them and as often as not – shuttering them. This is why the internet feels so banal, homogeneous these days.

Concurrently with the arrival of game-changing technology, we’ve seen the cracks of the early-21st century economic model of Technocratic robber-barons leveraging cheap, plentiful capital to just buy moats with cash. Higher interest rates, repeated self-destruction by founders, the pandemic completely shaking up work models all present opportunity to rethink how we work, how we build.

So here’s my naïve, idealistic take: with generative AI tools, the cost to build has plummeted – you no longer personally need deep technical, design, content skills to create something. On top of that, current financial constraints mean that there’s actually a disincentive to scale first. In several current oligopolies we are seeing small players carve out niches in the shadows of lumbering giants – local rideshare & deliver services; fediverse social media; localized ghost-kitchen companies; niche search engines; etc. Our AI-agent tools are simultaneously revolutionary and shockingly basic. And this – likely temporary – state means while we can build small (simple) things blazingly fast right now, larger – more complex – things are harder and slower.

So let’s build things – tiny, single-serving, single-purpose things; niche products where generative AI have flattened the landscape. There’s a marketplace ready for the taking where your economics at small scale are better than those at large scale. If you’re at all entrepreneurial, or dissatisfied with how something works for you – try solving it! browsing the Midjourney community showcase reminds me so much of early GeoCities and LiveJournal – just an explosion of creativity.

The early web was full of bad ideas, failed experiments, small-scale and large-scale work all jostling together, and we need that again. We’ve got 30 years of internet diversity, privacy and security knowledge to make all this better, safer, more inclusive, but – it is OK to make mistakes and be wrong and small scale! Do it over and over again!

And for those thinking bigger: the early web in some ways was grown by monetizing various unix commands and turning them into mass-consumable actions; my hypothesis is that there’s a similar opportunity now via generative AI, but it is less about technical actions than it is about social action. Monte Cook’s Cypher System is a table-top system that introduces characters as “I am a [descriptor] [type] who [focus]” – Adjective, noun, verb – which is remarkably similar to AI-prompt. Apps that can do that for people, repeatably and predictably are going to supercharge huge amounts of labour:

  • I am a friendly writer who produces alt text.
  • I am a serious accountant who checks your math
  • I am a dedicated animator who recreates your idea in 3d.
  • I am a conscientious assistant who manages your inventory in Shopify

Put a few of those commands in a box to generate business-in-a-box tools; and the cost/effort to do things gets ever-lower for everyone.

Professional Update: July 2018

set of old mobile phones, from largest to smallest

Since selling Pencilneck Software two years ago, I’ve very much enjoyed my time since then, spending more time with the kids, and running Codegnostic, my fractional-CTO consulting company. I’ll forever relish the opportunity of these past two years to be more involved with school and kid activities on the personal side, and the work on organizational change, growth and process improvement on the professional side. But nothing stays the same, and this is true for me too.

I’m extremely excited to announce that I’m joining TELUS Digital in the role of Senior Technology Architect, starting tomorrow, July 3rd. This role looks to be a really exciting & challenging extension/deep-dive on the work I’ve spent much of this decade doing on the technical management side, and I’m really looking forward to the opportunity to do this at a large and rapidly-growing organization.

My leadership principles

The path not taken

I’ve evolved my approaches to team-leadership over the years (as to be expected), but I’m not sure I’ve ever sought to explicitly write down a These Things I Hold To Be True. Many of these are fairly office-directed, but most apply to my approach when I’m team captain or kids’ coach too.

While writing this, I realized how much of what I consider to be important leadership activities are not things that come naturally to me, but are rather trained skills that I work at consistently. So please consider this a living document too: I’m always looking to improve both this and myself.

  • A successful leader creates more leaders. Remember you’re standing on the shoulders of giants. You don’t become a leader just because of your skills, but also everyone’s around you. Your teachers, your mentors, your peers, your reports – they all help make you a leader. Respect that continuum and play your part to carry it on.
  • Expect to learn from those you lead. This builds on the first idea, but is more explicit. Just because you’re in charge, doesn’t mean that you’re right, or that you always know better. Ask questions. Be curious. Respect opinions. Corollary is to try to hire people who have something to teach you, whether those are hard or soft skills.
  • Facilitate independence. Don’t be a roadblock for your team. Create structure and process that lets your team explore on their own. Encourage decision-making & independent thought. Provide scaffolding for them to stand on while they work. Be a safety net (or rope-and-harness?) if they fall. Transparent, living documentation of process & procedure is good for all.
  • Do the things that don’t scale. Alternate: sweat the small stuff. Remember birthdays. Remember family names. Ensure the pens work. Have the one-on-ones. Make sure the environment is solid. Clean the white board. Show up a little early to the meeting to make sure there’s water, chairs, whatever. If someone mentions something in an off-hand comment, follow up. Pay attention.
  • Own your team’s failures. When something goes wrong (and it will!), take ownership. Don’t pass blame down the line. Be the shield for your reports. Within your team, don’t point fingers. Post-mortems are your friend. Understand what went wrong, and look for how to prevent that in the future.
  • Let your team own their victories. This is the corollary of the last item. Chances are you’ve had plenty of opportunity to shine on your way up. Step aside, let them accept credit. Better yet, go out of your way to give credit to your team-members publicly for their effort. Related to this: celebrate milestones.
  • Be decisive. You need to be ready to make the call when asked. Or step in when something isn’t working. Do your homework, read up, be ready. Trust your instincts. Remember that *most* decisions are reversible. Be ready to provide a path, a solution, or just an affirmation when needed.
  • Be deliberate. A corollary of the previous point: sometimes, a decision is paradigm-shifting –  *not* reversible. So take the time you need, but be firm and committed to the path chosen.
  • Practice and encourage self-care. Your manner, your tone, your emotional state has an outsized effect on your team. If you want your team to be their best selves, do what you need to be your best self. Demonstrate this so your team knows it is ok when they need to do it.
  • Experience the front-line. Participate in pager duty and answer support calls. Push code. Whatever the most junior among you, or the most publicly-exposed experience, make sure you have a reasonable understanding of their day-to-day.
  • Advocate for the Customer. That customer could be yourself, a client, another department, whatever. Chances are your team is delivering something to someone. Be the voice for the customer internally. Talk to the actual customer. Keep the relationship between your team and the customer healthy.
  • Earn your team’s trust every day. Listen actively. Believe, and believe in your team. Be right. Be focused. Be honest. Be self-critical. Be ethical. Default to openness. Give trust. Support your team-member when they need it.
  • Embrace Constraints. It is almost always worth figuring how to do more with less. Optimize where possible. Lean on limitations to see where they lead you. Create limits and boundaries where they are otherwise unclear in order to provide direction & guidance.
  • Confront your bias. You’re human. You have blindspots. You have biases. Keep these in mind. Build a team that helps you reduce, confront and account for these. Find mentors, peers, advisors to explicitly work on these.
  • Fight Culture-fit. This both seems counter-intuitive and oppositional. But “culture-fit”  is a step on the path to homogeneity. Diversity of people leads to diversity of opinion & thought. It leads to better compromise and outcomes. Culture-fit is not the same as team fit. The former is an ephemeral, subjective judgement of person. The latter is a quantifiable, objective judgement of skill, role, expectation.

Creating Focus

(n.b.: this was originally posted at Medium, due to a server issue here)

I, perhaps like a lot of creatives, need to create “the right space” to get things done. I’m easily distracted when I’m not focussed. When I’m easily distracted, I’m not terribly productive.

I suppose I should point out that you might not call me a creative?—?I’m a developer, a programmer, an engineer if you so choose?—?although, to me, writing code has always been an amazingly free, creative process.

I try hard to work a short week (my aim is to actually work 30-40 hrs every week, which, as any entrepreneur or small-business-owner will tell you, is an ambitious goal. I fail more often than I succeed. But that’s my aim). Because of this, I cannot afford to waste my productive time. But inherently, I’m a procrastinator?—?I like to put things off, I like to tool around.

I’ve been running a consultancy for 11 years, so I feel like I’m starting to figure this all out now. While these may not work for you (you’re not me, after all), I thought I’d share some of the things I do when I’m having a hard time concentrating.

First: why do I need to create focus? Because I want to exist, permanently, in the zone. I want the outside world to fade away, leaving only what’s in my head. I need to easily remember the comment I logged on line 1823 of one file, while editing code in several others. If I’m tracing a bug, I need to hold every step in memory. When I write code, I often don’t commit it to screen until the entire function/object/whatnot is already written in my head. I wrote papers in university the same way: Wander around for days with a slowly forming paper, then, in 1 sitting, write out the paper and hand it in (I have a comparative French Literature degree so there were a lot of papers).


So! focus! to the point?—?here’s some of my tricks to fine the zone when it’s elusive. The first step is preparing to concentrate. Do any or all of these. I find it often takes me all 3.

  1. Find the perfect song. I play music when I’m producing. I pause it when I’m not. I can judge how much concentration-time I got in a day by how many minutes of music I listened to. But to start, I need to start it right. This used to be done with my own library, but these days I use Rdio. It doesn’t matter what this is. Depending on mood, this’ll be any number of genres. I know it when I hear it. I’ll admit that I’ll spend easily 15 minutes doing this. But the payoff is worth it. Because that one song is all it takes. You want a song that transports you, that lifts you, that effects that important chemical change within you. Do NOT work while listening to this one song. But work as soon as it’s done. This is your Ready! Set! song. The ending of the song is your Go!
  2. Meditate. Seriously. I cannot stress how great this is. Close your door, close your eyes, put your headphones on (no sound), and focus on your breathing for a few minutes. Whatever you can to not exactly empty your mind, but to quiet or direct your mind. Of note, I’ll purposefully not think of what I’m about to do, but rather an end goal of the task during this. But the important part for me is to create a singular thought?—?really no matter what that thought is.
  3. Walk. I will often leave the office, circle the block, come back. It takes 5 minutes. But I leave anxious, troubled, over-excited, etc and return ready.Walk with purpose. I don’t amble on this walk, I stride, with purpose. Don’t talk to someone. Don’t hang out by the water cooler on the way in or out. This isn’t a social opportunity. In may ways, this is an isolatingopportunity.

Now I’m ready to work?—?but often still not sure that I’m ready to focus. Particularly if I’m working on something I’m not too thrilled about, so I do a couple of warm ups.

  1. Pick a Quick Task & Do It. My rule is that this needs to be something I can complete in under 30 minutes. I will often set a timer to ensure?—?at 30 minutes I have to stop no matter what. This can be anything that you can accomplish solo: read & respond to a particular message. Write those comments you’ve been putting off. Explain a query. Review performance stats. Pick the smallest, easiest bug off the top of the list and squash it. Read commits. Whatever. It doesn’t matter. It doesn’t even need to be related to what you’re about to spend serious time on?—?you just want something to be a quick win that required some amount of focus. these are your warm-up pitches.
  2. Write out a sentence describing your success. “I rewrote a query that shaved 75% off of execution”. “I created a user object extension to describe customers” whatever. I personally like to write these in the past tense. I tend to use Notes.app on my iPhone to do this, but it doesn’t matter, really. But project your success. My only rule is that this is what I’m going to accomplish when I do start work. So the ambitiousness of the statement needs to relate to the time available to me. Don’t write “I rewrote facebook” if you’ve only got 3 hours.
  3. Tell your team how long you’re ‘going under’ for. If you work alone, likely not as relevant. But tell your co-workers, wife, kids, etc, that you need X time to not be disturbed.
  4. Go Silent. Turn of notifications. Turn of distractions. I: close Twitter. Close Messages. Close Skype. Close Adium. Turn my phone to airplane mode. Turn of notifications. Close all “fun” browser tabs. If I could, I’d close Slack, but that’s the deal I’ve made?—?that’s my emergency beacon.

Get to it!

It took me a while to compile the series of things I do over and over again to create focus, but these do the trick. I don’t always do all of this. But even on the worst days, I find that stepping through these really helps me find that focus that I need to do my best work. Many days, all it takes is choosing a song and finding my first task, and then blam, suddenly its fours later and I’ve got a shit-tonne done. Other days it takes all steps, & several iterations. But what’s awesome is that at most, I’ve “lost” 30-45 minutes, but created so much opportunity for creation.

A million dollars isn’t cool, you know what’s cool?

There’s been a lot of chatter locally about startups, startup culture and startup support in Vancouver. (See: Boris, Jesse, Allen, the twitters of @kaler & @igorskee for a quick round up). I’ve also been chatting a bit with Lauren about work-life, and recently caught up with my former boss Jason, where we chatted a bit about how we’ve come to define success.

With all the conversation about startups, I find myself wondering what makes a startup a startup. Must a startup be a product company? What about a Drupal-theming company? My company, Pencilneck Software is sort of a hybrid: We’ve built products – internally, our CMS is now on version 5. I’ve installed it on well over 250 clients’ websites; the newsletter module, before we retired it, sent some 10 million enewsletters. Our eCommerce module has processed upwards of $3 million in sales for our clients; Some 10,000 people have registered for events via our event registration module. 50,000 news articles & blog posts have been published in our News module. (Aside: Man do I love being able to quickly pull aggregate data)

We also build products for other people. But we call ourselves a service company, because the reason we keep getting work is for that: we provide a service – custom code, done right – to a wide variety of people. Also: we’re 9 years old. We’re self-funded and have never not been profitable. We’re now international (well, offices in Vancouver & Dallas). But we face a lot of the same challenges that start ups seem to face: where’s the talent? where’s the money coming from? who’s our audience? Where’s the space? Who can we talk to? Where’s the time?

We started like many startups do: I was employed at another company, but was under-utilized. I had an idea of how to do something differently. I met Jeff, and we combined our forces at started Pencilneck. Initially, we rented space from my former employers. Then we shared space with another small company. Then we got our own office in Yaletown (& man, did I ever feel like I had made it when that happened).

A Somewhat lengthy personal digression

Now I admit I’m not the best member of the local startup scene. I don’t go to events. I don’t blog much about company culture. I don’t look outwards that much. But the very reason why I don’t do all that is what I feel is missing from a lot of this recent chatter: About 6 years ago, I decided that growing big, getting bought, getting rich wasn’t what I wanted. This decision coincided, not even remotely coincidentally, with the birth of my first child. And suddenly that weekend’s worth of work to push out that latest revision just seemed pointless. And squeezing in that extra deliverable for the client this week by pulling a few late nights wasn’t worth missing Liam splashing around in the tub.

When I first told my business partner that I wanted to work only 4 days a week, we had a huge argument – only a few weeks before, we were both still working 60, 70 hour weeks, doing stellar work. But our corporate culture had come to expect and depend on this. & this wasn’t unusual – most of my friends were working similarly. And then Liam was born and I took a couple of weeks off. When I came back though, not only did I no longer want to work weekends, I didn’t want to work evenings. I wanted to leave work at work and come home and be present for my family. Given that I was the main production engine (our partnership has always been Jeff on the sales &  UX end, me on the technical end), this had some dire consequences. And it was rough. But we made it work. And I started working only 4 days a week, which has been amazing.

& Back to the Subject At Hand

The title of the post is of course lifted from The Social Network – you’re probably already thinking the answer is “a billion dollars”. But no. You know what’s cool? Living your life. Enjoying it. Spending time with family & friends. Making money is good, but if you’re good enough, you don’t need to be wildly successful and get bought and make millions. You can make enough and relax and chill and be happy. You can’t build a silicon-valley-style successful startup without being a selfish asshole willing to sacrifice everyone around you. Harsh? Sure. Hyperbolic? You bet. But somewhat true. Because that sort of success takes time. All your time. Whether it’s time at the desk coding, refining your product. Time travelling to sell your product. Time online to support or promote your product, nothing can reduce that time. And that’s time away from everything & everyone else. And maybe that’s a trade you’re willing to make – but you can’t say it’s not a selfish one. Every interview I’ve ever watched with a successful founder talks about their passion for the project and the crazy things they’ve done.

What this all has to do with Vancouver’s startup scene

A common thread amongst all the commentary linked to above is finding the special sauce that will encourage a startup culture here. I think a mistake across them all is to think that we need a startup culture that resembles the American startup culture at all. I’ll admit a personal bias to the lean startup model, but more than that, I bias to the Vancouver model: laid back, just as interested in what’s outside and around as what’s happening in town, and to beat a dead horse just a little more, sustainably. Vancouver’s got a decent number of tech firms that not only have done great work, but have been around for an astonishingly long time. Not only that, but we’re all interwoven. Vancouver’s web-tech community is quite small. My company is built on the idea of partnerships – we don’t do design, so we partner with design firms. Other’s just do strategy. Some just do hosting. And in my experience, we all hire each other as needed. I’ve worked in partnership with at least a score of local companies to either provide expertise or pull theirs as I need it. And you know what’s so great about this? By handing off work as needed, I get to continue a nice lifestyle and get to contribute to theirs too.

Coworking spaces are ideal for the small or solo company. Incubators are great too. So are mentors and advisors. But maybe let’s not teach a culture based on getting big, getting bought, getting out. Maybe let’s teach a culture of being a sustainable business: You want to grow an idea, and need funding? Do something to fund it – trade services, sell something. Hootsuite may be a freemium model, but it grew out of Invoke – a successful firm who could likely afford to fund it – particularly if they built it to solve a problem on a project, or internal use. There’s also the “practice makes perfect” idea to follow: if you want to make money, practice it. Find a business model. Companies that succeed without a business model are few and far between. Get one and get one quick.

There is room in a world of sustainable startups for funders – we’ve always used client work to fund projects, but once, for a particularly out-there idea, we got BDC funding. What I liked about it was that it was a loan – we didn’t have to give up ownership or control to get it. But I could imagine a scenario where taking funding would be beneficial to allow focus. But let’s look at small-batch funding models that enable focus, not massive burn rates.That suits Vancouver more too – we’re a small city with small amounts of capital. Funding a few people for 3 months doesn’t cost that much  – let’s say $20K – and 3 months should be about enough time to get pretty much anything software-related at least demonstrably functional, if not complete. If it isn’t, you’ve probably suffered feature creep. Or don’t have enough focus. You only need to do one thing  well to launch and start making money. I don’t want to sound like I’m shitting all over Jesse (who’s done way more to foster a community and more importantly, exchange, than I ever will) or Boris (who’s arguments around the #MadeInVan and #WeAreYVR at right on point), but I think the focus on funding & acquisition is off a little. There’s more important things. The Mayor’s Greenest City initiative is about green tech, but it’s also about lifestyle: cycling, walking, transit, healthy eating, locavores. Let’s encourage a start up culture that reflects our city, where lifestyle is equally important. When I was first starting Pencilneck, the so-called triple-bottom line was a popular measurement: social, environmental, economic should be equally weighted. Our start up culture, what we want to promote and produce locally might do well to reflect that more.

 

 

I’m in the forest, searching for the shore

Corkscrew tree
Searching for the way through

I’m percolating. Gestating. Mulling. Procrastinating. Whatever you want to call it, I’ve been in this mode for the better part of a week now. This happens regularly to me – something triggers my subconscious and it starts to take up and more and more mental resources. When I get phases like this, I’m sort of hopeless: I can’t remember anything, I’m  as distractable as – SQUIRREL! – my production nosedives. I almost never seem to get a warning that this is about to happen, just suddenly there I am – feeling like I’ve only got half brain-power. Typos go up. I’ll find myself staring off into space for who knows how long.

There’s a plus side to this. When I get like this it’s because I’m figuring something out. It sounds strange to say I don’t know what it is I’m figuring out, but historically, whatever pops into my head on the flip-side is fully formed, ready for me to copy down. I used to write papers this way – wander the streets aimlessly for a day or two, come home, sit down & type for a couple of hours before school, come home with an A paper shortly. Prior to agreeing to have kids I did this. When I wrote the first scheme for the original Pencilcase CMS, back in 1999, I couldn’t work for a week. Then in 1 sitting, I wrote the first version of the CMS over about 14 hours, with little to no edits.

So what have I been thinking about lately?  What’s going on back there? Well, there’s a bunch of stuff going on that are viable candidates for taking over my brain:

  • Moving: We might move away. We might buy  a new place in Vancouver. We definitely want to spend some time away – 3,6,9,12 months, who knows. The plan for that needs to resolve itself.
  • Community: I’ve been thinking a lot about the cross-sections of digital and real-world communities. My experience as a terribly shy human vs. a fairly chatty avatar. How to correlate the two, how to bridge the various communities I participate in on- and off-line.
  • CMS: The current world of CMS’s don’t really match the type of tools many of my clients need. Nor do the social CRMs. Nor does the issue-tracking software we and they all use. But they all form part of a solution to a real issue. And I feel like I’m on the hunt for a lightweight suite to handle lots of basic needs.
  • mobile & responsive design: Having now built a couple of responsive sites, in addition to 2 distinct “mobile” sites in the last few months, there’s a path there that I haven’t quite found. This is closely related to the CMS problem: solving the issue of ongoing site existence & emerging break points & client-control of content and so on.

 

So I’m in the forest, I’m looking for the path. I keep catching glimpses of the shore out there, where the horizon is clear and present, but I’m not there yet & it’s frustrating.

WherePost: now even more useful!

Since I launched Where Post? on Friday morning, the response has been pretty gratifying. My thanks to David Eaves for his nice post about Where Post? this morning. I launched the app with a total of 28 mailboxes and 1 post office. Since then, 29 contributors have added in another 400-odd mailboxes and about 20 post offices. (NB: ‘contributors’ are identified currently via a combination of a cookie & IP Address – so it’s not exact, but close enough).

I’m please to announce a very useful addition: Every post office in the Google Maps database, everywhere, pulled in from the Google Places API. I had noticed while adding post offices that there was often an envelope icon already in the map where I wanted to add a post office. After some digging this afternoon, I was able to pull in the places API to just get all the places that identify as a post office.

There’s a few oddities to figure out:

  1. Often each post office is listed 2 or 3 times at least in Canada: The french name & english name appear to be 2 places, and sometimes the post office in english, the post office in french and the store containing the post office are all listed. Odd, and I haven’t yet figured a way to filter this, but still pretty nice.
  2. I have a rate limit of 100,000 queries a day. Given that each time you see the “loading mailboxes” message there’s a query to Google, there’s a distinct possibility I’ll reach that. For now not a worry, but definitely a scaling/caching issue to think about in the future.
  3. Integrating with the “nearest” function. Currently, the “nearest” mailbox is simply pulled from an SQL query – which means that post offices, coming in from Google, are ignored. There’s likely a way to merge the two, but nothing’s coming to mind at the moment.

As always, if you have any suggestions, comments or anything else, please let me know!

Strange Safari rendering bug, please help!

We do work for GSPRushfit, including managing their cart. Currently, I’m having trouble with a bizarre bug in their cart.

When customers update their Shipping Country, a few things happen behind the scenes:

  1. If the country has a few shipping options, a <select> appears next to the Shipping title. Otherwise, the shipping method is displayed.
  2. The shipping/taxes & totals get updated.

On Chrome, Firefox, IE, Opera, Safari older than 5.0 and Safari for Windows, this works totally fine.

However, on Safari 5.0+ on OS X, the displayed text doesn’t update. What we’re doing is updating the “name” of the shipping method, via jQuery. After some ajax calls, there’s a little function that simply updates with an .html(); edit. Here’s what it should do:

Shipping to Europe on Most Browsers

When I update my country to “South Africa” in Firefox, I get:

Shipping Internationally

But when I do this in Safari 5.0+ on a Mac, I get this:

What Safari Shows

As you can see – somewhat borked. It doesn’t clear the old text and update the new text. If you highlight with a mouse, the updated text shows correctly. Viewing source code, all has been written. It’s purely a rendering issue. In the displayed case above, this isn’t the end of the world. However, alongside the shipping “name” we also update more pertinent information such as Shipping Amount, taxes & of course the order total. The source code is all  updated, so if/when people actually click “place order”, all that is correct. But understandably we’re seeing a fairly high abandonment rate from Safari users.

To make matters worse, this code works perfectly on both my local dev environment (Mac, Apache) AND our staging environment (Windows 2008 Server, IIS). It’s only on production that its failing. Things I’ve isolated as NOT being the cause:

  • SSL: Same bug appears whether over SSL or not.
  • jQuery version: I’ve updated jQuery, rolled back jQuery.
  • CSS/JS served locally vs. from CDN: same.

We have a variety of rules for caching/not caching on the server to help speed up the site. I’ve turned on/off a variety of these with no success – but that remains the major difference between dev, staging & live.

Has anyone seen this? Could you, if you have 5 minutes, please try and recreate the issue and let me know if things work for you or not? To recreate:

  1. Using Safari, go to http://www.gsprushfit.com
  2. Click on the big red “Click here” at top right.
  3. Click on “Add to Cart”
  4. Set your country to, say, Canada in the Shipping section.
  5. Change your country to “Norway”
  6. Change your country to “South Africa”

With each country-change, both the info next to where it says “Shipping” should change. Above, at right, the shipping & Handling total should update too.

Please let me know in comments if this works for you.

The 2-hour, 2-hundred-dollar rule

I’m not a big believe in golden rules, generally. But we have 1 golden rule at work that supersedes all other rules. And that’s our 2-hour, 2-hundred-dollar rule. Which goes like this:

No one shall spend more than 2 hours or $200 on any one thing without first discussing it with the team.

I can’t claim to have created this rule, although I wish I had – Jeff did. I wish I had created this rule because I think it accomplishes two simple but great things:

  1. It speaks to the face we’re all equal in our responsibility to the company – Jeff and I follow this rule, all our staff follow this rule. We’re all equally free to explore, to think, to create – with a set boundary
  2. It provides some freedom to our staff to make their own decisions about what bugs they want to fully explore, what topics they want to read more about, when they want to push something to focus on perfecting something else.

I’ve used this rule to justify buying a particular ebook, ordering some new software and spending a morning optimizing 1 site by a few hundred milliseconds – all within the past 2 quarters. Nothing major, nothing ground-breaking, but allows me some freedom to just explore something of interest to me.

This same rule has also prevented me from spending all day improving the usability of a feature that is only used occasionally by a client, and already had an existing, functional interface. I simply brought up that I wanted to explore this, and that I thought I needed 4 hours. After discussing with the team, we determined it just wasn’t worth it, so I left it alone.

And that last, the case wherein the request to spend additional time is rejected may in fact be the most useful – because it forces the proponent to defend a position, it forces all of us to get up to speed on a project and to think critically about not only what’s best for us as a company, but what’s best for our client.

A Milestone, of sorts

Earlier this week, the NPA launched their new website for the fall 2011 civic election campaign. With this, I’ve reached a personal milestone: Over the past decade, I’ve built election campaign websites for each of the Vancouver civic parties – COPE in 2002, then Vision‘s in 2005 and now the NPA this year. I like to think it shows a professional non-partisan manner than is to be commended. You might say it’s pure capitalism at work (or worse yet that I’m a sell-out). Regardless of your opinion, given how entrenched political parties and their service providers seem to be, I’m quite proud that these various groups have all chose me &/or my company over the years to provide them with professional, quality web-related services.

For this latest project, we were purely the technical team – I’ll have no hand in the ongoing messaging or marketing. Design & project management was provided by our frequent collaborators at Myron Advertising + Design.

At the provincial level, this year I’ve also completed the BC trifecta: I’ve built sites for each of the BC Liberals, BC NDP, and waaaay back in the 90s, the BC Green Party.

So I’m an experienced campaign website builder. If you need a website for your campaign, let me know.

%d bloggers like this: