Surprise. It’s all about honesty

Last week we had a sales meeting with a potential client. As it turned out, we were unable to help with the task they had in mind. It was outside our area of expertise.

We may have been able to fudge it. Call us stupid, but we don’t think ‘fudging it’ is the way to keep clients happy or maintain a low client turnover.

In this situation there are two options:

  1. Quote ludicrously high with the aim of missing out on the job. In the event the quote is accepted, the job can be outsourced with a tidy profit.
  2. Tell the truth and decline the work

We chose the latter option and used the opportunity to explain our areas of expertise. Selling the company, not the lie.

The natural fear is the potential client will storm out of the meeting, muttering obscenities under their breath.

What actually happens is the potential client realises their current project – or at least the original part of their current project – is a bad fit. They also realise they’re not dealing with sleazy salesmen willing to say anything to get a job and deal with the consequences later.

The second realisation sells a company. It’s something that can be used to convert a single project into a long term relationship.

Ludicrously high quoting, lies or fudging a task may get you more clients but getting clients isn’t the aim, the real aim is to keep them.

Web 1.5

The brief for Big Red Tin and its redesigned sister site, Soupgiant, included a couple of notes for our very patient designer, Christa at Zepol:

The frame of both sites will be pretty similar. We were thinking of different colour schemes […] as a way of demarcating the two sites.

We haven’t got an exact style in mind, but something relaxed and modern without going over the top – Web 1.5 if you like.

— source: email to Zepol (emphasis added for this post)

The rest of the brief detailed the content separation between Soupgiant and Big Red Tin. We wanted the design to come from the designer to fit the content, not from a committee to fit some other agenda.

In the context of this site’s design, the exact interpretation of Web 1.5 was left to Christa’s devices. As should the exact interpretation of any design brief.

To me, web 1.5 means something like: dump all the cliches of Web 2.0 design, at the same time keep the good bits

“A good bit” may be a feature that is used frequently, such as oversized footers, because it adds something for users of the site. Cliches are those design tricks that add nothing but appear on every second web site, such as elements with faded backgrounds and rounded corners.

It strikes me, as a developer, it must be said that the definition of design is something similar: dump all the cliches and keep all the good bits

Failing to do so risks rendering you a regurgitator, not a designer.

JavaScript the WordPress Way / Part 2

In Part 1 we discussed the conflicts that can occur on a WordPress site if themes and plugins add JavaScript using <script> tags. We introduced the wp_register_script and wp_enqueue_script functions developed to avoid these conflicts.

In this section we’ll deal with a more complicated example and use Google’s AJAX libraries API to lower your bandwidth costs. We’ll also take what we’ve learnt about including JavaScript and apply it to our CSS.

JavaScript the WordPress Way / Part 1

Two of the most important WordPress functions are often ignored by WordPress theme and plugin developers. This is the fault of the functions themselves, they need to improve their PR and hire better publicists.

It’s also possible your theme or plugin will work perfectly well without these functions on its own. Problems will arise when your theme or plugin both use the same JavaScript library or if Prototype and jQuery are both used on the same site.

These functions are used to add JavaScript to the html, either in the head or the footer.

Introducing wp_register_script and wp_enqueue_script

Rounded Corners Everywhere

Spending some time looking at CSS3 support on caniuse.com, I noticed how similar browser support for border-radius and rgba colours is:

rgba-vs-border-radius

The striking similarity allows us to use both the old graphical and new css3 methods for rounded corners, giving us the same look in almost all browsers but without wasting the bandwidth of users with modern browsers.

On a previous version of this website, I used this method with the following CSS:

.aktt_widget .aktt_tweets {
  background: #999
              url(10pxrounded-210w-24.png)
              no-repeat top center;

  background: rgba(153,153,153,1) none;

     -moz-border-radius: 10px; /* FF1+ */
  -webkit-border-radius: 10px; /* Saf3+, Chrome */
          border-radius: 10px; /* Opera 10.5, IE 9 */
}

Browsers that don’t support rgba colours use the first background call which includes an image to emulate rounded corners. Browsers that do support rgba use the second background call, which includes a fully opaque colour but no background image, for the most part these browser can interpret the border-radius calls that follow.

This method falls over in Opera 10.1, which displays a square border, and will fall over in IE9, which will interpret the border-radius call and download the image. I don’t see these couple of exceptions as a big problem, as browser support always involves catering to the majority.

Confirming a caller’s identity

The ATO called me last week and asked for my middle name and date of birth to confirm my identity. I told the operator that I wasn’t in the habit of giving out my personal details to incoming callers.

Rather than try to convince me that anyone could answer my mobile phone, the operator agreed it would be foolish to give out such details. He gave me his extension number, and a phone number where I could verify he was from the tax office.

Being the cynical sort, or paranoid (I’ll let you decide), I googled the ATO’s website to confirm the number. It was legitimate. I called back and reconnected to the operator immediately. The entire process took less than 30 seconds.

It got me thinking: Googling ‘<number> site:ato.gov.au’ in hope the ATO had slipped up and the non-public number was on their website was an inefficient step.

A more efficient way to confirm the number would be for the operator to give out an ATO URL: ato.gov.au/<number> being the logical choice. At the URL, there could be a short message informing the visitor that the number is an ATO phone number. Robots.txt would be used to exclude search engines from indexing that URL.

It’s a simple fix that costs the ATO very little and protects them and their tax payers.

10 Ways to Draw Traffic to Your Site

Once you’ve started your site, your blog, or real time web app, there’s no point publishing and just hoping people will come. With that in mind, let me present ten ways to increase your visitor numbers.

1. Top Ten Lists

Create spurious top ten lists for an immediate spike in traffic. 24 hours later, you can go into Google Analytics and get a warm fuzzy feeling as your visitor numbers increase. It’s best to ignore bounce rate, and average time on site.

While your first time visitor numbers have increased, it’s unlikely that many of them will convert to regular visitors or subscribe to your RSS feed; but that was never the goal. The goal was to increase your visitor numbers: always handy for boardroom presentations.

Published
Categorized as Opinion Tagged

Never too old

My grandfather passed away last Sunday, November 22nd 2009, at the grand old age of 97.

There are many reasons I respected my grandfather. After all, he was my grandfather. I could have chosen to write that he became a full-time carer of my grandmother in his 80s, how active he was in his church community, or any number of things.

But it’s his decision to get a computer and onto the internet about three years ago, aged 94 that prompts this piece. Not that this was his greatest achievement, but because we write about the internet here.

To put this into perspective, he was 25 when Alan Turing described the Turing Machine and 65 when the Apple II launched. He was already 80 years old when Microsoft released Windows 3.1.

It would be re-writing of history to say that granddad was the most competent computer user in the world. A few months ago he left this message on my answering machine:

Oh dear, oh dear, oh dear. <click>

I called back a few minutes later and he was slightly upset because he’d lost an email he’d written to my sister. For people my age, this wouldn’t be a big deal — we know how and where to look for a stray email. If the message is completely lost, using computers and sending emails is our second nature so it takes only a few moments to recompose ourselves and the email.

Another time, he’d managed to block my aunt and uncle’s email address in Outlook and needed help unblocking it.

Aged 94, Granddad gave it a try. Years later and weeks before he passed away, he was still trying to learn more about the software on his computer. I could not be prouder of having a man like that as my granddad. He learnt from us and we learnt from him.

If you’re not willing to try something because you think you’re too old, try anyway and you might surprise yourself. If you don’t want to try, that’s fine too.

Dedicated to Ron Feltscheer, Jan 1st 1912 ? Nov 22nd 2009.

Charging for themes? Do the right thing!

Of all the WordPress functions, I think wp_register_script, wp_register_style, wp_enqueue_script, and, wp_enqueue_style are the most elegant. It’s possible to get away with using only the wp_enqueue_* functions, but I prefer to use both for a little bit more control.

For the uninitiated, these functions allow you to add JavaScript and CSS files to the header (or footer, in later versions of WP) without running of the risk of another plugin adding the same file, that is, you avoid the following:

<script type="text/javascript" source="http://.../a-plugin/jQuery.js"></script>
<script type="text/javascript" source="http://.../a-plugin/plugin.js"></script>
<script type="text/javascript" source="http://.../my-theme/jQuery.js"></script>
<script type="text/javascript" source="http://.../my-theme/theme.js"></script>

If you develop themes or plugins for WordPress and are unaware of these functions, you should refer to the codex to get the low down on at least wp_enqueue_script, and wp_enqueue_style – these register and queue the files, the wp_register_* functions register the file ready to be queued for output.

The Rant

Despite the value these functions can add to themes and plugins, they are under-utilised in development. The functions have wider adoption in plug-in development, but it’s still well below 100%. In theme development adoption is virtually non-existent (at least in the themes I’ve used).

This failure to code properly is evenly spread across both free and paid themes. I?m happy to look the other way for free themes. After all, the motivation behind the theme may have been to learn WordPress development.

In commercial themes, particularly those above the US$30-$35 price point, it’s downright frustrating that these products haven’t been developed properly.

When someone purchases a theme, they shouldn’t have to debug the product to find out why a JavaScript framework is being included twice. The reason for the purchase is that they either don’t want to, or know how to, develop.

Avoiding costly mistakes

Evaluating a commercial theme on behalf of a client triggered this rant. At $195, it’s quite expensive in the world of WordPress. As I was viewing the source code of the online demo, I discovered the faux pas. We’ll advise against using that theme as a starting point. In fact, within short time we’d found a theme $195 cheaper that would do the job.

Looking at the source code of a demo site is usually enough to tell you how the theme is inserting its scripts:

  • Both <link> and <script> tags will use single quotes around attributes (‘), rather than double quotes (“),
  • CSS <link> tags will have an ID attribute ending in -css, eg: id=’shadowbox-css-css’, and,
  • JavaScript and CSS files include the version number as a query string eg jQuery.js?ver=1.3.2 (although a hook can be used to remove this)

Making sure that the wp_register_script, wp_register_style, wp_enqueue_script, and, wp_enqueue_style are included properly will save time, bandwidth and also avoid some detrimental conflicts.