Every businessperson makes mistakes, but how do they make up for them?

Today 37 Signals had a major outage on all of their websites. These websites are used by thousands of people every day to run their business, including me. I found out about the outage when I tried to lookup the phone number of a customer I was about to call. Luckly for me I had a copy of the number some place else.

It turned out that the outage wasn't 37 Signals' fault, but it did impact their customers. These customers pay to have access to their websites, and to use the data they have stored in them. Once the services were back up 37 Signals issued a great apology and even offered to go the extra mile for their customers:

... While we don't have a formal service-level agreement (SLA), we still want to compensate anyone who felt they were negatively affected in their work because of this outage. Please write support@37signals.com and we'll get that taken care of. ...

Any business that didn't provide a SLA like 37 Signals could have just said "Yep, we had downtime. Sorry, deal with it". Instead they are offered to help the people who were affected, even though they have no obligation to. This is how a business should deal with a mistake, even if it isn't their fault.

It even appears they took the same action in the past and tried to do their best to make it up to people.

So how does your business handle mistakes? Are you proactive and try to go the extra mile to please your customers?

Eric

Tagged: business customer service

I've always been a heavy reader, online and offline but this weekend I finally noticed the hole I dug myself into. I was taking in more information that I could get through and I was falling behind. I resolved then to start taking action to dig myself back out by following 3 simple steps:

1. Stop digging

The first step to getting out of a ditch is to stop digging. In my case I've made it part of my weekly review to drop 5% of my feeds every week. Sorry guys, it's not you it's me. I track enough blogs that I'll hear about industry changing news eventully.

2. Fill in the hole

Now the hole isn't getting any deeper but there still is a massive hole. What's the best way to fill up a hole? Add the dirt you took out of it.

In my case I'm implementing the 2 minute rule for my reading items. Each item gets 2 minutes to decide it's fate:

  1. Not Valuable: Delete.
  2. Valuable but not right now: tag it in del.icio.us based on the main content.
  3. Valuable right now: Read it.
3. Don't get buried again

So now I've stopped digging but new things are still coming in. I'm going to adopt another 2 minute rule for each new item:

  1. Not Valuable: mark as read.
  2. Valuable but not right now: tag it in del.icio.us based on the main content.
  3. Valuable right now but will take longer than 2 minutes to read: Tag as @check for later.
  4. Valuable right now: Read it.
Results

So far it's working great. I've cut my subscriptions, checking the new items faster, and taking time everyday to go though my del.icio.us page of items (470 items dating back to March of 2007!).

What steps do you use to keep yourself out of the information hole?

Eric

Tagged: gtd rss

Screenshot

I'm happy to announce I am releasing my first Redmine plugin, Redmine Timesheet. I'm releasing it under the GNU GPL v2

Purpose

This is a plugin to show timelogs across all projects in a Redmine install. I use it for:

  • How long did I work today? (timelogs for today)
  • How much of my time is billable work? (timelogs for specific activities)
  • How much do I need to invoice for a project? (timelogs for a billable activity on a project)
Features
  • Filtering of timelogs
    • by Date ranges
    • by Project
    • by Activities
  • "Run Timesheet" permission to restrict feature to specific users
Install
  1. Download the archive file and extract it to your vendor/plugins folder. You can also download directly from my Subversion server using Rails's plungin script

     script/plugin install svn://dev.littlestreamsoftware.com/redmine_timesheet_plugin/trunk
    
  2. Follow the Redmine plugin installation steps.

  3. Login to your Redmine install as an Administrator.
  4. Enable the "Run Timesheet" permissions for your Roles.
  5. Add the "Timesheet module" to the enabled modules for your project.
  6. The link to the plugin should appear on that project's navigation.
Help

If you need help you can leave a comment here or enter an issue directly into my bug tracker.

Eric

Tagged: open source redmine

I've been reading up a lot on different ways to manage code using SCM systems because my current ones take way to long to do anything advanced.

Tagged: git merb piston ruby subversion


In order to organize my articles, I split my blog into four sections now:

  1. Home - all articles from Business and Tech
  2. Business - articles about running my business and freelancing
  3. Tech - articles about technology and software development
  4. Link Blog - posts with links to content I come across that I found interesting and want to share

Another benefit of this split, I now have four RSS feeds to cater to your specific content need. So if your only interested on my freelancing articles, you can subscribe to the Business feed. If you want to follow my progress with Ruby on Rails, my Tech Feed is where you want to be.

All the feeds are listed on the sidebar and below.

Eric

Feeds
Tagged:

While reading about git I found a feature of Subversion that I never used. It's called svn blame and will show each line of a file with information about who last changed that line and in what revision. Running svn blame vendor/plugins/project_scores_plugin/init.rb for one of my Redmine plugins shows this:

     2     edavis # Redmine sample plugin
     2     edavis require 'redmine'
     2     edavis 
     2     edavis RAILS_DEFAULT_LOGGER.info 'Starting Project Scores plugin for Redmine'
     2     edavis 
     2     edavis Redmine::Plugin.register "scores_plugin" do
     2     edavis   name 'Project Scores Plugin'
     2     edavis   author 'Eric Davis of Little Stream Software'
     2     edavis   description 'This is a scoring plugin for Redmine that will allow projects to be scored'
     2     edavis   version '0.0.1'
     2     edavis 
     2     edavis   # This plugin adds a project module
     2     edavis   # It can be enabled/disabled at project level (Project settings -> Modules)
     2     edavis   project_module :score_module do
     2     edavis     # This permission has to be explicitly given
     2     edavis     # It will be listed on the permissions screen
     3     edavis     permission :view_scores, {:scores => [:index]}
     3     edavis     permission :edit_scores, {:scores => [:edit]}
    14     edavis     permission :view_score_options, {:score_options => [:index]}
    14     edavis     permission :edit_score_options, {:score_options => [:edit]}
     2     edavis   end
     2     edavis 
     2     edavis   # A new item is added to the project menu (because Redmine can't add it anywhere else)
     3     edavis   menu :project_menu, "Scores", :controller => 'scores', :action => 'index'
     2     edavis end

From that I can see the majority of the file was created on r2 the 'score_options' were added on r14. I'm still amazed whenever I find a new useful feature in my tools.

Eric

Tagged: subversion tools

December Goals and Actions

Even with the holidays I was able to hit all my goals with some adjustments.

  1. $4,000 in revenue

    Wrapping up my current projects was just enough for me to hit my revenue goal.

  2. Complete planning on my redesign

    After starting, I found I needed to define my market better so this goal was changed to Create 2008 Business Plan. Nothing else I did in December helped me solidify my future path as well as my business plan.

  3. Meet 5 new people

    I slacked on this goal until the end of the month, when I met a few of the people for a project.

January Goals

I'm using January to tune up my Ruby on Rails skills and to scale up my marketing again.

  1. Find an accountant - I need to start thinking about my taxes for 2007 and to plan out 2008. My goal is to evaluate some accountants in the Portland area and pick one whose advice will help my business.
  2. Complete 10 "Back to Ruby on Rails" tasks - A lot has changed in Ruby on Rails since I worked with it. I've kept a pulse on the community but it grows so fast I need to schedule time to upgrade my skillset.
  3. 40 new RSS Subscribers - I'm planning on doing some more blogging this year and adding 40 new subscribers will help give me more points of view on my topics.
  4. Meet 10 new people - I've found I can easily meet 5 new people a month so shooting for 10 will be a nice stretch.
  5. Open Source 2 projects - I have a couple of internal plugins that I've been using for a few months. Open Sourcing them would benefit the communities and will also add to my portfolio of Ruby work.
  6. Write a guest blog post - My last guest post generated a good amount of traffic for both my business website and also this blog so it should be a good way to get some more exposure.
Some lessons I learned from this month:
  • Get out of your comfort zone: It's hard to turn away from something comfortable, especially when you turn towards the "unknown" but you will never grow unless you push yourself. For me this means leaving my sidetrack to PHP development and heading into Ruby on Rails again.
  • Take time to reflect on your business: I spent a lot of time during the December holidays thinking about my business and what it means to me. Now I have a clear focus of where I want to go and how to get there.

Eric

Tagged: business business-reviews

The challenge has been thrown down. Both Shane Pearlman and now Joshua Clanton have both "requested" that I take Shane's Entrepreneur Interview.

What’s your personal mission statement?

Have fun developing software to improve people's lives.

What’s the biggest mess you’ve dealt with this year?

My desk.... Really the biggest mess I've had is overcommitting to projects. I've taken on new projects before I look at how much work I have already because I hate letting people down.

What current entrepreneurial efforts consume your time?

I have a few projects that are taking the majority of my time.

Related to the point above, I keep taking on more projects and neglecting my marketing. In 2008 I am planning on solidifying my branding and release a few completed projects as Open Source.

Why do you do what you do? What inspires you? When do you get most excited?

It's fun creating software.

As lame as it sounds, I love to write boring business software. Yea a cool new flashy Web 2.0 tagable taxonomized streaming social media website is nice, but how does it help society? Boring business software on the other hand might help a business grow, which in turn creates more jobs and economic activity.

Now a cool new flashy Web 2.0 tagable taxonomized streaming social media website with a solid business plan, that's a different beast altogether ;)

Boxers or Briefs?

Boxers.

What do you do when you’re not programming or writing?

Not programming or writing...... I guess I would be reading about programming, business, or writing. You mean I don't have to work all hours of the day?

What one thing made the biggest difference when getting started?

Building up my network of friends. 100% of my projects come from this network, oftentimes started just as a single comment on a blog.

What’s your exit strategy?

Which one?

  • Short term I want to move from custom software into providing a software product.
  • Long term, I want to "retire" and manage my passive cashflow.
What is the last thing that made you belly laugh?

I laugh every day but can't remember the details of the last time. The comic xkcd tends to make me laugh every time it comes out, these posts were especially good.

Have you ever been in business before?

Yes, three or four times before. Most of them were half-hearted attempts in college and where never 100% thought out. Needless to say, they all failed but I did learn a lot from them.

At what point do you consider yourself successful?

I consider myself successful now. I might not have as many thing as I wish but I'm able to provide for my family, buy new toys, and am happy to wake up everyday.

What was your first experience with a computer?

Two memories:

First was when I was really young, I would visit my dad in southern California. He worked for PG&E as an engineer so he had a computer at home. There was a game I used to play all the time, it was a story based RPG with graphics like Dragon's Lair but I cannot remember the name.

My second memory is more current around 1995, and it was when my step-father brought home a 486 with Windows 95. For me this was major step up from the Apples my mom was using at her school, the 486 was actually polished and shiny. It took me very little time to start hacking on it. Lets just say I "cleaned" up the Windows folder of extra files to make enough disk space for SimCity.

Steve Jobs vs Bill Gates in a jello wrestling match, where’s your money?

Who cares, I would be watching the ESR, RMS and Linus on stage two.

Where do you do your best thinking?

In my desk chair with the lights off, the music on, and the sun long set. The stillness really puts my mind at ease and ideas come easily.

What does your average daily work / life balance look like? How much time do you work, play and sleep?

Balance, what balance? Currently I work anywhere from 8-12 hours a day 6 days a week. Even when I'm not working I tend to talk and think about work. Obliviously my wife doesn't like this.

I am starting to slow down now and take more personal time but it hard coming from a family of workaholics.

If I could introduce you to anyone, who would it be?

Paul Graham. I love his essays and his often contrarian ideas.

What stops you from giving up when you are frustrated?

My wife. Without her I wouldn't have the confidence or support to do anything. I would probably be cutting and pasting Java code for $7.50 an hour without her encouragement.

If Chuck Norris and Steven Hawking had a baby (hey it’s my damn interview), would you vote for her for president?

Depends on her stance on Software Patents and digital rights. A person having famous parents don't affect my opinion as much as their ideas, beliefs, and actions do.

Additional Question: Why do you care about Open Source so much?

Software is just a bunch of ideas about the world we live in. The same can be said about writing, religion, physics, philosophy, and just about any other intellectual activity. All of these ideas are the product of human thought, someone took the time to sit down and think. By sharing this idea with people, the world becomes richer; before the world had 1,000,000 ideas and now it has 1,000,001.

With closed source software, the idea is only shared with the select people that can afford the idea. Even then they only get the result of the idea, they know nothing about the process the person went through to create the idea.

With Open Source software on the other hand; any person can take the idea, look at it, examine how this idea was created, and can improve on the idea. This process makes the world even richer than before and exponentially grows new ideas, et cetera.

Well, that completes my interview of myself. Shane is keeping track of the the other interviews people have been posting over at his blog.

Eric

Tagged: business

November Goals and Actions

I was wrong about setting so many goals for November. Being booked solid, my time was spread to thin between my goals and my client's projects.

  1. $7,000 in revenue

    Midway through the month, I found the only way I could hit this target was to either add another project to my workload or work 12 hour days. I decided to lower my target to $5,000, which I reached with a strong push at the end of the month.

  2. Planning completed on a free web resource

    I completed the planning but discovered that the offer wasn't that good so I scrapped the idea for now.

  3. Finish all portfolio tasks

    Completed two more but couldn't find the time to finish up the rest of them.

  4. Meet 5 new people

    I was introduced and met 5 new people, hitting my goal by midmonth.

  5. Get 5 new newsletter subscriptions

    My newsletter subscriptions have slacked off the past couple of months so I missed this goal by 3 people. I'm going evaluate the effectiveness of newsletters soon.

  6. Speed read at 750 words per minute with 70% comprehension

    Sadly, I couldn't find any time to commit to this goal.

December Goals

With a lot of holidays and time off in December, I am going to use this time to finish up my current commitments and start some planning for 2008. The goals I selected for December are:

  1. $4,000 in revenue - Finishing up my current projects should generate close to this amount.
  2. Complete planning on my redesign - I am planning a major redesign for my business website the beginning of 2008. Yes that is why I was asking for web designers earlier.
  3. Meet 5 new people - I think meeting 5 people has been a good goal that I can accomplish each month.
Some lessons I learned from this month:
  • Track your commitments: Committing to too many things at once will cause you to fail at all of them. It is better to move slowly than to burnout.
  • Do what you love to do: If you are going to spend the rest of your life doing something, make sure you love it. Otherwise you are doing yourself and everyone around you a disservice.

Eric

Tagged: business business-reviews

I really enjoy using Mephisto but it is missing some of the features that other blogging applications have. One is the ability to send a trackback ping to another blog post. So I built my own library to handle it.

Download trackback.rb

require 'net/http'
require 'uri'

# Simple trackback class to send a trackback to another weblog
# This is used via the console
#
# Example:
# >> t = Trackback.new("theadmin.org", 227)
# >> t.send('http://trackback.example/url.php?1234')
#
class Trackback

  @data = { }

  def initialize(host, article_id)
    site = Site.find_by_host(host)
    article = site.articles.find(article_id)

    if article.nil?
      raise "Could not find article"
    end

    if article.published_at.nil?
      raise "Article not published"
    end

    @data =  {
      :title => article.title,
      :excerpt => article.body_html,
      :url => "http://" + get_full_url(site, article),
      :blog_name => site.title
    }
  end

  def send(trackback_url)
    u = URI.parse trackback_url
    res = Net::HTTP.start(u.host, u.port) do |http|
      http.post(u.request_uri, url_encode(@data), { 'Content-Type' => 'application/x-www-form-urlencoded; charset=utf-8' })
    end
    RAILS_DEFAULT_LOGGER.info "TRACKBACK: #{trackback_url} returned a response of #{res.code} (#{res.body})"
    return res
  end

  private

  def url_encode(data)
    return data.map {|k,v| "#{k}=#{v}"}.join('&')
  end

  def get_full_url(site, article)
    article_peramlink = article.hash_for_permalink
    url = site.host + '/' + site.permalink_style
    ['permalink', 'year', 'month', 'day'].each do |value|
      url.gsub!(/:#{value}/,article_peramlink[value.to_sym].to_s)
    end
    return url
  end

end

To install this just save the above code to a file in your Mephisto's lib/ directory. Now you can send a trackback to a website using the Rails console:

$ script/console production
>> t = Trackback.new("theadmin.org", 227)
>> t.send("http://acheron/blog1/wp-trackback.php?p=1")
=> #<Net::HTTPOK 200 OK readbody=true>

I haven't had a lot of time to work on it, so I hope I can get some help improving it. Some ideas I have to improve it:

  • Turn into a Mephisto plugin
  • Unit tests
  • Scan all urls in the Article, looking for trackback urls.
  • Support other types of trackbacks

Download trackback.rb

Eric

Tagged: mephisto ruby