AWIA – Australian Web Industry Association Committee

July 26th, 2010, by Adam

What is AWIA?

From their website:

Formerly Port 80 Inc, the Australian Web Industry Association represents businesses, individuals and students involved in the web industry and aims to:

  • Further the advancement of the web industry within Australia;
  • Educate the general public about the role of professionals in the web industry;
  • Foster greater ties with like-minded organisations.

The Committee

As Managing Director of The Frontier Group, I have nominated to be on the committee in one of the upcoming vacant positions.

As a reasonable size business in the industry it would be good to have a voice within the association and help craft the future of the web industry Australia wide. Paid AWIA members can vote at the AGM (as well as submit a proxy vote).

The 2010 nomination statements are on their website today. AGM details can be found here.

We are a Perth web design and web development company and this is our blog. We specialize in building web applications with the Ruby on Rails framework. Jump to the Ruby on Rails category or contact us.


Rails camp Perth – November 2010

July 19th, 2010, by Adam

Today we announced that tickets go on sale for Rails camp 8 on Friday 23rd July.

Rails camp will be running from Friday 12th November to Monday 15th November.

When the tickets go on sale, you can head over to Eventbrite and grab them.

We are a Perth web design and web development company and this is our blog. We specialize in building web applications with the Ruby on Rails framework. Jump to the Ruby on Rails category or contact us.


How much does a website cost?

July 13th, 2010, by Adam

The question

This question has been asked for nearly as long as web design companies have been in existence. If you spend 5 minutes doing some research on Google, you will find the answer lies somewhere in the vicinity of FREE to upwards of $100,000.

I’m not sure this helps with making an educated decision as a consumer.

Having met over 200 small business owners in the past few weeks as part of the Achieve More Online workshops, I’ve seen first-hand some extremely bizarre website pricing and fielded many a question about what an appropriate cost might be.

The extreme

Unfortunately, I came across a business (single operator, home-based) who had shelled out over $7,000 for a basic templated web site with 4 pages (Home, About, Photo Gallery, Contact) by a Perth web design company who shall remain nameless. They had also paid for a content management system (CMS) which they had not received. The site would have taken less than a day to put together.

On the contrary, there seems to be an expectation from the SME sector that a high quality website should be somewhere in the vicinity of $2,000 or less.

The price is right?

While I don’t think there’s an easy general answer to the title of this post, here at The Frontier Group we have our own reasons on why our websites are priced the way they are.

The breakdown of a typical small business website:

Research – This is the first stage in the project, where requirements and the purpose of the website are determined. A website needs a real business reason to exist, and we need to know what that is.

  • The website needs to pass the what, why, how, what if? test. ie what/who the business is, why they should deal with you as opposed to a competitor, how you work, what the benefits are of using your product/service or alternatively, the downside of not using your product/service.

Content – This component is often overlooked or left until last. How can your website be effective in communicating to your customers without content? Just what content you want your website to have will determine how the site will be designed and structured. Knowing and planning for this upfront is key.

  • Think about the problem/s you’re actually trying to solve with a website and how that might potentially need to look, do some research on competitors who have successfully achieved a similar outcome in your industry.

Accessibility – Now we’re moving towards the design phase, so it’s time to start thinking about accessibility. We’re committed to complying with the Disability Discrimination Act 1992 when it comes to developing a website for all. This makes sure online information and services are accessible by people with disabilities. We adhere to the Web Content Accessibility Guidelines (WCAG) 2.0, which covers a wide range of recommendations for making Web content more accessible.

  • Most people designing their own website or using an online site builder will miss this step completely. On the other hand, there’s plenty of companies who will also leave it out, or fail to inform you about it due to price or ignorance.

Wireframing & Visual Design – At this stage in the project a designer may present wireframes of the concept ideas to develop an outline with the customer. Once a layout structure is agreed, they then develop the visual design of the website. At the completion of this stage images or “flats” are produced for each of the individual page types.

  • If you’re after a unique business look and feel, don’t succumb to the temptation of a templated site. While this may reduce barrier to entry, chances are, there’s a hundred other sites out there that look identical to yours.

Prototyping – We produce a prototype website for our customers allowing them to view it in a web browser. This allows them to “click around” the site and get a better representation of how different effects or transitions will appear. At this stage, cross-browser testing and necessary website code validation occurs.

  • Check that the site functions correctly and give it a thorough test. Select a handful of your best customers and give them the option to test it for you.

Deployment – The website is then deployed to a test server, so the customer can approve that the website has been produced to the required standard.

Hosting & CMS – Domain name, Email and Website hosting needs to be considered at this stage. Also licensing and setup of a CMS product for content management. For our customers a CMS is non-negotiable, as it enables the customer to make basic changes to their content on an on-going basis. This negates the need to contact us and pay for changes.

  • Watch out here for vendor lock-in. If you want to pick up your site and change hosting company or web designer, can you do so?

Other Considerations – You might think that the website is now complete, but a website needs constant revision and updating to remain relevant. Other options at this stage involve setup of specific analytical tools, search engine optimisation techniques, email marketing tools and maybe a complete online strategy.

The answer

Armed with all this information, how much would you now pay?

You should be able to make an informed decision as a consumer that you are indeed getting what you paid for. If you’ve got a specific budget in mind, you need to appreciate and understand what that will get you from a reputable company. The value of the website to your business is the single most important point to remember.

Finally, I’ve included a guide to fairly common pricing structures by companies who follow this similar process for small business websites:

  • $0-$3,000 – Simple templated design or inexperienced student or freelancer.
  • $7,000-$15,000 – Small business website with a unique business look. Reputable company/freelancer.
  • $20,000+ – Custom website with unique requirements. Usually requires a large amount of additional programming.

I’d love to hear about your experiences in the comments below, as a customer or web design company dealing in this area.

We are a Perth web design and web development company and this is our blog. We specialize in building web applications with the Ruby on Rails framework. Jump to the Ruby on Rails category or contact us.


Specjour with Custom Bundler and Database Setup

June 25th, 2010, by Aaron

We have a test suite here that now is rapidly approaching 2 hours using a single core. Let me just repeat that. A developer realistically would have to leave their machine testing overnight to see if the suite is working. That’s really not good enough.

Specjour has been a bit of a turn-key miracle worker with our RSpec suite, however lately we’ve started to require some custom database setup that we do in a seeds.rb file as well as some custom bundler install parameters as most of our devs don’t have MySQL installed. Both of our needs were being nicely stomped on by Specjour so I thought it was time to look elsewhere.

I took a trip down Hydra lane and while getting to the point of having a working, local, dual runner system was a piece of cake, getting something working remotely via SSH took me hours of pain. Debugging the remote SSH workers was a nightmare and I spent a couple of hours running through code before deciding it was probably better to update our existing solution rather than tooling up a brand new one.

Back to the Specjour code. Specjour includes a rails directory inside which is an init.rb which Rails will run at initialisation (it’s part of what Rails does) but the Specjour initialiser will always just run the default database setup task no matter what initialiser you’ve got setup. We had a specjour initialiser that runs if ENV['PREPARE_DB'] was populated, which it is by Specjour, the problem was that the Specjour initialiser ran in the Rails after_initialization hook and therefore stomped all over our database setup.

The first step was just to have our initialiser write to another ENV element and then to have the Specjour after_initialize handler respect this. This isn’t too hard to implement as the after_initialize handler is just a block that is attached and so inside of this block you just need to check that ENV element. In my case I created a new ENV['DB_PREPPED'] element when my database setup had completed and then when the after_initialize block runs it checks for ENV['DB_PREPPED'] and will do nothing if that’s been set to true.

Easy. I now had Specjour respecting our database setup task.

The next step was to try and test this outside of a Rails application, not only that but to test the operation of a block (anonymous function?). To do this I setup a stub on a mock Rails class and let it capture the after_initialize block and then I ran a number of specs against this block.

module Specjour
  module DbScrub
  end
end

DO_NOT_REQUIRE = true

describe "Rails Initialiser" do
  before :all do
    ENV['PREPARE_DB'] = "true"

    stub(Specjour::DbScrub).scrub

    class Rails
      class << self; attr_accessor :configuration; end
      class << self; attr_accessor :test_block; end
    end

    config = Object.new
    stub(config).after_initialize { |args|
      object = Object.new
      Rails.test_block = args
      object
    }
    Rails.configuration = config

    require 'rails/init'
  end

... tests ...

This code essentially mocks up Rails.configuration and then stubs the after_initialize method. This stub then places the block that after_initialize yields to into Rails.test_block. When I require 'rails/init' it sequentially processes the file (as with all Ruby) and the stub will capture the block. After this is a bunch of tests I run an whether the Specjour::DbScrub.scrub method is called or not, so it’s nothing special.

I felt like at this stage I had fairly well tested the main aspects of the database setup.

The next issue was with how bundler was being handled. We have a situation where we would like to install sometimes without some gems. Some of the gems we use and have written use applications we’d rather not maintain in development and get tested in our staging and production environments. We generally will run a bundle install in development without the production or metrics groups so I wanted to have the ability to pass through a custom bundler command. That’s pretty easy now with my gem. Inside .specjour/bundler.yml there is a command property. I think this is more complex than what’s required, but I can foresee us needing a number of custom rake tasks and shell scripts so this bundler.yml should have probably started life as a settings/commands/something_generic.yml

To test this part of my changes was pretty simple. I basically just stubbed the system calls to bundler to give certain return values and checked to make sure the correct program flow happened.

describe ".bundle_install" do
    let :manager do
      stub.instance_of(Specjour::Manager).project_path { "/tmp" }

      stub(Dir).chdir(anything) { |args|
        args.last.call # This yields to the block for Dir.chdir()
      }

      manager = Specjour::Manager.new
      stub(manager).project_path { "blah" }
      mock(manager).system('bundle lock')

      manager
    end

    it "should perform a bundle lock" do
      stub(manager).system('bundle check > /dev/null') { true }

      manager.bundle_install
    end

    it "should check if there are gems required" do
      mock(manager).system('bundle check > /dev/null') { true }

      manager.bundle_install
    end

    context "when gems are required" do
      before :each do
        # Not a before :all as it needs to hook into the let hook above

        stub(manager).system('bundle check > /dev/null') { false }
      end

      context "and there is a bundler YAML file" do
        before :each do
          config_file = ".specjour/bundler.yml"

          mock(File).exists?(config_file) { true }
          mock(File).read(config_file) { "" }
          mock(YAML).load(anything) {
            { 'command' => "do it" }
          }
        end

        it "should get the bundle command from the YAML file" do
          mock(manager).system('do it > /dev/null')
          manager.bundle_install
        end
      end

      context "and there is no bundler YAML file" do
        before :each do
          mock(File).exists?(".specjour/bundler.yml") { false }
        end

        it "should perform a bundle install" do
          mock(manager).system('bundle install > /dev/null')
          manager.bundle_install
        end
      end
    end
  end

You can see that I stubbed our the Dir.chdir block to just yield directly to the call, otherwise it’ll throw an exception. Then I stubbed and mocked out the Kernel.system calls as necessary. Kernel methods are generally included into Ruby objects so you don’t stub Kernel, you stub the object that has the Kernel methods. Most of the testing is pretty basic, but I’d be keen to hear if I’m doing anything incorrectly!

This was my first major venture into adding functionality to a public project and it was good fun. I think it made me do a little better work than I might normally, it’s a great motivation to potentially have peers look at how you do things.

After bundling it all up and testing it here with over a dozen developers and even more machines I’m pretty happy with how it functions. I’ve made a pull request back to the original gem creator and hopefully he’ll like what I’ve done. In the meantime if you want to check it out then my Specjour is available on Git Hub.

We are a Perth web design and web development company and this is our blog. We specialize in building web applications with the Ruby on Rails framework. Jump to the Ruby on Rails category or contact us.


Parallel RSpec Performance Testing

June 23rd, 2010, by Aaron

We’re currently deciding on hardware to build a bit of a testing cluster on which we’ll run whatever the current best remote testing package we can find. At the moment, for us, that’s ended up being Specjour. We ended up pitting one of our i7 iMacs against a $400 Acer box we bought. We installed Ubuntu’s REE 1.8.7 on the Acer machine and RVM and REE 1.8.7 on the iMac.

i7 iMac – Quad Core Hyperthreading

real 11m14.131s
user 0m0.776s
sys 0m0.348s

Acer – E5200 Dual Core E5200

real 35m56.658s
user 0m0.870s
sys 0m2.500s

It seems like the little Acer box offers slightly better value for money in this case. I’d like to see how we’d do with some virtualisation sitting on top this, but I think the included memory will be quite limiting in this regard. I wonder whether the processor resources are actually being fully utilised.

We are a Perth web design and web development company and this is our blog. We specialize in building web applications with the Ruby on Rails framework. Jump to the Ruby on Rails category or contact us.


Follow Us

Stay in the Loop

  • Enter your email address to subscribe to our mailing list. You'll get updates about our products, specials and bonus offers, and general behind the scenes news from our team.

Twitter

Facebook Fans

Newsletters

Alexa Rank

Testimonial

The boys at The Frontier Group are amazing! For such a relaxed and personable organisation, they have phenomenal technical ability and a rampant professionalism. They have customisable solutions for all of my IT needs and they always deliver, on time and beyond expectation.

They fix problems other service providers can't and they helped me get a critical section of my web site up and running 10 minutes after I emailed the request!

Alex Hyndman, Nexus Car Share.

Featured Project

Case Study - Caudo Group - www.caudo.com.au

Website

www.caudo.com.au

Caudo Machinery

Caudo Group engaged our services to redesign their outdated website. We sent our photographer on-site to capture the essence of their business and turned it into a stunning web design.