Oct
13

Studies have shown that given a choice between a small reward soon and a large reward later, people prefer the small reward soon.

You can use this to your advantage when you outsource projects.

Don’t outsource your complete project to one developer. Rather break it up and post lots of small jobs. Maybe into few Joomla extensions and a few design jobs. Developers will generally do the smaller jobs for less. Small jobs are less daunting and offer a small reward soon.

It takes more planning and work but it’s worth it. I’ve saved 80% on projects using this method. It also saves you from the possibility of being stuck with a single deadbeat programmer.

Oct
11
Leaplists  |   |  Trackback

Lists are great. They make knowledge frighteningly easy to understand and remember. There’s a reason the Internet loves them.

Just to say thanks to everyone who’s ever written a list, I made Leaplists. A cool Javascript widget. I think Leaplists is going to spark a new generation of lists.

Lets take a look at what it can do for your blog and how you can start using it.

Leaplists converts static lists on your website or blog into dynamic, ever changing, user driven Leaplists. Users vote on what order the points on your list should appear.

After you embed Leaplists on your web page, every list you choose will show up with up and down arrows next to your points. Your users can click these arrows to vote on which points they like and dislike. Over time, your lists will represent your user’s opinions. Your great points will show up first and your not so great points will show up last.

Leaplists is free to use and abuse. Leaplists stores everything for you on our servers, so it wont clog up your database.

Try it. It takes a minute to get it running and you can start seeing results right away. If you don’t like it, it’s just as easy to remove (but I’m sure you’ll love it).

- Let me know if you like it and tell your favourite bloggers to give it a try. The more bloggers use it, the more readers will get used to bumping knowledge.

Installing Leaplists

All you have to do is paste this code into your HTML.

<script type="text/javascript" src="http://leaplists.siteorigin.com/assets/widget.cmp.js"></script>

You have 2 choices here.

If you’re going to be using Leaplists a lot, you can embed it on every page on your site. The easiest way to do this is to copy and paste the leaplists code right into your website’s template. In the <head> section of your site (after being gzipped, the widget is about 1k).

If you’re only going to be using Leaplists on a couple of your pages, then you can just insert it into the articles/posts where you’ll be using it.

The next step is to choose which lists you want to appear as Leaplists. Add the “leaplist” class to all UL and OL elements that you want to appear as leaplists. You’ll also need to assign a unique ID to each list so the Leaplists server can keep track of things. Any ID will do but it needs to be unique across all Leaplists on your blog.

<ol class="leaplist" id="all-my-items">
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ol>

Demo

Here’s a list of the top web browsers. You decide the order:

  1. Firefox
    Mozilla’s free, open source browser.
  2. Chrome
    Google’s new kid on the block. Has some very cool, very advanced features. The browser reinvented.
  3. Safari
    Apple’s super fast, light weight browser.
  4. Opera
    A web browser and an Internet suite.
  5. Internet Explorer
    Microsoft’s browser. The default browser for Windows.

If you’re using Leaplists on your blog, please leave a comment. I, for one, would love to take a look.

Feedback and Quirks

Leaplists is a work in progress. Please send your feedback to greg@siteorigin.com. I’ll do my best to fix things up.

Leaplists uses IP addresses to keep track of votes. This means users who are on dynamic IPs or behind proxies will have minor issues using Leaplists on your blog.

Giving Cred

If you like what Leaplists brings to your blog or website, you can say thanks by linking back to this post. A “powered by Leaplists” link under Leaplists on your blog would also be appreciated.

Oct
08

Two weeks ago I had no employees. Today, I have about 8. I honestly don’t know how many I will have 2 weeks from now but I really don’t need to know. I can build up an entire project team in a matter of days, add to it as I go and tear it down the moment my project is complete. This is what I call the Ad Hoc Workforce (ad hoc means “established for a specific purpose“).

It’s even better than it sounds.

The Ad Hoc Workforce is efficient. When I’m paying my employees, they’re working. They’re not socializing, taking coffee breaks or shuffling paper, which accounts for roughly 75% of an average office worker’s day. If they’re not working, they’re not getting the job done, if they’re not getting the job done, they’re not getting paid.

The Ad Hoc Workforce is also cheap in terms of both time and money. I don’t do; meetings, office politics, hiring and firing or training underqualified employees. I do pay my employees, but only a small fraction of what I’d be paying my office workers if I actually owned an office building (oh, and I don’t own or rent an office building).

It’s a wonder the office worker workforce still exists.

The best part is, using a site like GetAFreelancer, anyone with a credit card can have their own Ad Hoc Workforce.

Aug
24
Uncategorized  |   |  Trackback

“Enter one or more keywords here” under your search bar isn’t going to help your users. If they managed to find your site they’ll know how to use a search bar.

They also know what links are for. Don’t tell them to click here.

When a user clicks onto your site, you earn a small fraction of their attention. Their eyes dart around furiously until they find what they need or get bored. If you waste their attention telling them things they already know, they’ll get frustrated and leave.

Design simple sites that don’t need instructional postits.

Jul
24
Uncategorized  |   |  Trackback

An interface so easy, a 1 year old could use it!

It’s not always possible to pull that off, but simple is always better. That’s the fundamental rule of web design. Your users don’t care how great you know your website is. They’re only willing to take a minute amount of time to figure it out.

A check list for simplicity

  1. Test your website obsessively
    Don’t rely on your own tests. Don’t even ask your mom to test it. She’ll be too nice and might not be part of your target audience. Instead publish a partially functional version of your website then buy some clicks on Adwords. You want cheap traffic, so bid on high traffic, low converting, international keywords with content network ads enabled. Track exactly what these users do on your site. Use Google Analytics and something like Clickdensity which gives you some nice visuals. Feature your email prominently and ask for feedback. Start testing as soon and as often as possible. A 100 user test could cost you less than $5.
  2. Use conventions
    Google helped make the search bar a convention. 10+ years of bloggers have done the same for blog layouts. Don’t let their efforts go to waste. Unless you’re doing something cutting edge, use (copy) tried and tested conventions. Add your secret sauce to make them better. Then add and test small changes as your website matures.
  3. Be consistent
    Once your user has taken the time to learn your interface, don’t go changing on them all the time. Keep your layout, font and menu the same across every page on your site. Even when it comes to the type of language you use and message you portray, keep things the same. Record these conventions in a central document that everyone in your team can access (and understand).
  4. Show history
    Users like to know where they are, where they’ve been and where they’re going. They hate surprises. Amazon’s checkout is a perfect example. Every step in their checkout is accompanied by a complete “checkout plan”. It’s simple, but it answers those 3 questions at once. Breadcrumbs can do the same for content sites.
  5. Functional eye candy
    The iPhone uses all its slides and fades to give visual cues. They answer the ever important questions “where am?” and “where have I been?”. You can do the same. Use functional eye candy to help guide your user’s focus and understanding. Don’t use it to try look good.
  6. Save the best for first
    If you want your users to see it, put it first. In some cases your user’s idea of where to look first may be different from where you think they’ll look first. Test your site to find out where they actually do look first or use an image to try guide their eye into the right place.
  7. Predictive interface
    If a user doesn’t need to see something, don’t show it to them. If they’re browsing the red widgets section of your site, don’t show them a list of gadget categories. Use your test results to find out exactly what it is users click on in the different sections of your site. If they don’t click it, get rid of it.

7 steps to making your website designes a little better. This is only the start though. Website usability is a broad, ever expanding subject and it doesn’t even have all the answers. Find out and apply what you can. Above all else test. There’s a reason that’s first on the list.

Jul
22
Uncategorized  |   |  Trackback

If you’re a web designer, rounded borders will pay your bills. So it’s best to learn how to do them (well).

I like this method because it’s completely fluid (unlimited height and width) and only uses a single image. Here’s how it works.

The Layout

Our layout is fairly straight forward.

CSS Layout

Our rounded border block layout

Each of the bars (top and bottom) can be broken up into 3 blocks - middle, left and right. The left and right blocks are our rounded corners.

The Corner Image

Use Photoshop to create a circle with the radius you want for your block’s rounded corners. You can use any stroke and colours you want. We’ll use this circle to represent our corners.

Basic circle

Basic circle

Next merge your image and erase any background colour. This will allow your website’s background to show around your block’s corners. A minor, but important detail. Save the image.

Circle with transparency

Circle with transparency

The HTML

The HTML for the block is pretty much what you’d expect, given the layout.

<div class="fluid_block">
   <div class="top">
      <div class="left"></div>
      <div class="right"></div>
      <div class="middle"></div>
   </div>
   <div class="content">
      This is foo
   </div>
   <div class="bottom">
      <div class="left"></div>
      <div class="right"></div>
      <div class="middle"></div>
      </div>
</div>

The Top And Bottom Bar CSS

The bars each consists of 4 divs. A container div which is used for CSS selectors. Nested inside this div are 2 floating divs which represent the left and right corners. There’s also a middle div which we use to create the straight border.

Here is the CSS for the top bar:

.fluid_block .top .left{
	float:left;
	width:8px;
	height:8px;
	background:url(./corner.gif) top left;
}

.fluid_block .top .right{
	float:right;
	width:8px;
	height:8px;
	background:url(./corner.gif) top right;
}

.fluid_block .top .middle{
	margin:0 8px;
	background:#E8F2F8;
	border:0px solid #8ABAD8;
	border-top-width:1px;
	height:7px;
}

The first 2 selectors are our top left and top right corners. We use left and right float styles on these blocks so they’re rendered on either side of our middle block. We give them the height and width of our circle’s radius so only a quarter of the circle is shown. We use background positioning to make sure the correct quarter is shown.

For the middle block, we use a left and right margin equal to our corner blocks’ width. This allows our middle block to slide in between the corner blocks. Its background colour and border join our 2 corners. Remember; borders aren’t included in a div’s height so we give it height of 1px less than our corner blocks’ height.

Repeat the same idea for the bottom bar CSS. Swap every “top” you see in your CSS styles for a “bottom”. The border on the middle block and the background positioning on the left and right corners.

If your output doesn’t look like mine, it probably means you’re using IE6. I’ll get to the fix for that later.

The Content Block CSS

.fluid_block .content{
	background:#E8F2F8;
	border:0px solid #8ABAD8;
	border-width:0 1px;
	padding:0 7px;
}

There’s nothing fancy here, just a block with left and right borders. We also use left and right padding to make up for the top bar.

IE6 Fixes

Internet Explorer 6 has the knack of destroying CSS web pages. People still use it though, so we have to deal with it.

The first fix we need to do is a pretty standard IE6 fix. IE6 assumes there is a &nbsp in every div. So a div’s height can never be less than its font height. We fix this by setting the font size in the top and bottom bars to 0.

.fluid_block .top div, .fluid_block .bottom div{
	font-size:0;
}

Now here’s what our block looks like in IE6.

Our block in IE6

Our block in IE6

IE6 loses 3px on either side of our middle blocks in our 2 bars. Luckily that 3px is constant, regardless of the block’s size. So there’s an easy fix.

.fluid_block .top .left{
	float:left;
	/* IE6 Fix */
	margin-right:-3px;
	width:8px;
	height:8px;
	background:url(/images/block/corner.gif) top left;
}

.fluid_block .top .right{
	float:right;
	/* IE6 Fix */
	margin-left:-3px;
	width:8px;
	height:8px;
	background:url(/images/block/corner.gif) top right;
}

.fluid_block .top .middle{
	/* IE6 Fix */
	margin:0 5px;
	background:#E8F2F8;
	border:0px solid #8ABAD8;
	border-top-width:1px;
	height:7px;
}

The first thing we do is subtract 3px from the left and right margins of our middle block (in my case taking the margin down from 8px to 5px). This will however break the design with other real browsers. So we take advantage of the fact that IE6 doesn’t understand negative margins. We give a -3px margin to the inward facing edges of each of our corner blocks.

The result; fluid, light weight, cross browser, rounded borders. You can apply the same theory to create some fairly advanced fluid blocks.

Here’s the full source code, along with a slightly more optimised verison.