15 Dec 2011

Why I use imdex.html rather than index.html

If you go to compversions.com you will be redirected to /imdex.html. Ever since I launched CompVersions, this has been one of the most common/frequent pieces of feedback I have gotten. Some were questions - "Hey Marc, why did you use imdex rather than index?" - others were polite 'bug reports' - "Hey dude, you have a typo in your root file. It should be 'n', not 'm'...duh!" They weren't that facetious, but I am sure some were probably thinking it.

Even to this day, I still get questions/comments about it, so I figured I would explain myself.
The way Rails works is that it has a routing file that handles all incoming requests. If you type in 'compversions.com/project', my routes file will check to see where that request should be sent to internally (based on a rule that I explicitly setup before hand, if it doesn't find a rule it throws an error). However, because web servers automatically recognize html files natively, Rails has a folder in your app called 'public'. This is where your static html files can go - if you want to use them. Rails automatically defers to files in that folder first, before handling any routing. If you include an 'index.html' file in that folder, Rails router will not even get the request. The webserver will just respond with the index.html file inside your public folder.

So when you create a new Rails app, you are told that you should delete your index.html file and then set your routing rules so that any requests to your root domain (e.g. compversions.com) gets routed to the right Rails controllers.

The issue I had was that I wanted a specific type of behavior. I wanted, when you are logged in to CompVersions, when you type in compversions.com it shows you your dashboard. I didn't want to send you to compversions.com/home or app.compversions.com or anything like that...I wanted the default root domain to show in the address bar - without doing any URL redirect wizardry. If you are logged in, and type compversions.com/home/index that too will take you to the dashboard - but I didn't want to force every user to see that URL when they clicked 'home' or 'dashboard'. 

Compversions-dashboard

I also wanted the marketing site to be as close to 'index.html' as possible - i.e. be as 'native' as possible. 
So in my routes.rb, I have the usual rule that looks like this:
root :to => "home#index"</pre>
Which basically says send all requests to the root domain (compversions.com) to the controller called 'home' and action 'index'.
Then in my HomeController, I have a before_filter that checks to see if the user is signed in and redirects if not...like this:
before_filter :redirect_to_marketing


def redirect_to_marketing

  unless user_signed_in?
    redirect_to '/imdex.html' 
  end

end
Sure that could have been 'marketing.html' or anything, but I didn't want those. I didn't want the user to recognize that the names were completely different The only way to do this is to get a name that's as close index.html as possible, and while I played around with iindex.html and indexx.html and other permutations, imdex seemed to work best. 
It has turned out to be an interesting conversation starter, and people generally tend to be intrigued when they hear the reasoning.


You can follow me on Twitter here.

2 Dec 2011

Why Developing with Rails is Fun and Pleasant

Disclaimer: This post is NOT for experienced Rails developers. It is for designers and non-developers thinking about diving into code and trying to decide which language/framework they should use.

 

Why did I learn Ruby & Rails?

I am fairly new to Rails & Ruby. I just started learning about 8 months ago when I started developing CompVersions

CompVersions is a web application that allows designers to upload multiple versions of their designs – so that their clients can easily give them a thumbs up/down and add comments as necessary.

01-compv-2-up-view-hover-menu

 

The idea for CompVersions comes from my previous experiences working with multiple designers. I have, at various points in the past, worked on projects where I was either project lead or project manager and had to coordinate designs and feedback from multiple designers and multiple stakeholders.

Getting  & forwarding emails with PDF files as attachments and notes specifying the line and page number in the PDF was not cutting it anymore. I tried Basecamp, and it wasn’t designed for this problem, so it didn’t work the way I needed it. So I decided to build my own solution.


Why write this post ?

A friend of mine (wassup Hector) is doing a similar journey (i.e. building a web app/site while learning), but he is in Microsoft land (Dot Net, IIS, MSDN, the whole nine yards).

I was explaining to him why I love Rails & Ruby, and how it completely abstracts the pain of doing things like SQL queries (although, if you want to work with SQL you surely can).

I was trying to find a real-world example of what I meant, but all I found were the regular ‘build a blog in 15 minutes’ and tutorials and articles that take you through the entire app process. I didn’t want that, so I started looking through my code. I realized that I have the perfect use case to highlight how wonderful it is to use Rails. He appreciated it, and understood what I meant, so I figured I would write it up and release for everybody else.

 

What is my example ? 

Rails is known for allowing the developer to focus more on the business logic of the application, rather than the technical behind the scenes stuff. 

What does that even mean ? Here is an example: 

I was hooking up the email functionality where once a designer registers they get an email from the app. I use a rails gem (the equivalent of a plugin) called devise that makes it relatively easy to get up and running with an authentication solution. It handles users logging in and out. Registering, forgotten and resetting passwords. Locking and Unlocking an account (say if your application requires high security where you only allow X login attempts, then the account is locked). Plus a few other features. All in one plugin. All done to industry standard best practices – e.g. when a user forgets their password a unique link is sent where they can reset their password (i.e. a password is not sent via plaintext in email, that’s very insecure). I get all of this functionality with very little effort (relatively speaking given the amount of functionality I get). 

So the first question I was faced with is, how do I address the designer? Do I say "Hi John!" ? But what if there is no first name, how do I fallback to their username (sexyjohn79) and then subsequently their email (sexyjohn79@email.hotmail.com). That’s ‘business logic’.


How do you implement this business logic? 

The registration form for CompVersions has First & Last Names, Usernames & Email addresses. A user can login with both their username and email address. But I haven't decided whether or not I am going to let first & last names be mandatory. Most likely will, but I wanted to implement it to gracefully handle the situations when it doesn't have one or the others. 

Rails uses what is called an MVC structure. Model, View, Controller. Rails encourages you to put all of your business logic in the ‘Model’ portion of your app.

Show me some code, damnit! 

In my User model (which is where Rails handles all the business logic related to the 'users' of the app), I have a method called 'pretty_name' that handles this option. This is how my ‘pretty_name’ method looks:

def pretty_name 
   f_name || username || email              
end

 

Please explain that code to me

To break it down for my non-developer friends out there:

·         Line 1 is the definition of the method. The method is what I will call to 'execute/invoke' this block of code. This will become clearer shortly.

·         Line 2 basically says "If the value 'f_name' exists, return that value" - i.e. if there is a first name (or if the first name is NOT null) return the first name. Then it moves on to say "...OR ( ||  = OR ), if that doesn't exist check to see if a 'username' exists. If it does, return that value..." and continues to "...OR if no f_name and username exist, return the email_address". The assumption here is that a username MUST exist because the user will be getting this message in their email. Ruby executes left-to-right.

·         Line 3 ends this method 

That's it. That's the business logic.

 

Then, in my template for the actual email (i.e. the “View” from the MVC), this is what the first few lines look like:

 

<p>Hi <%= @resource.pretty_name %>!</p>
 
<p>Thank you for registering with CompVersions.<br />

The system says 'Hi ' and it executes the method 'pretty_name' on the object @resource (@resource is an object that devise – from earlier – uses to refer to the current user account) and then returns the best value. So if the person's first name is John and it is there (i.e. the value is not NULL), the email will say "Hi John". If there is no first name, it will say "Hi sexyjohn79", where 'sexyjohn79' is the username. If there is no username it will say "Hi sexyjohn79@email.hotmail.com".  

Here is an example of how the end product looks. All for the simple “Hi Marc!”

 

02-finished-email

 

So is Rails really a walk in the park, for non-developers ?

I don’t want you to misunderstand what I am saying. I am not implying that in order to get from nothing to a full app with login, for a non-Rails developer it is easy and quick. It’s not that easy. But as a general rule, the things you will be struggling with (once you get the basics down) are how the app will function – the business logic – rather than missing semi-colons and errant SQL queries.

Like all languages and frameworks, it has its quirks. Rails has a set of conventions that make sense and force you to develop one way (many consider it 'the right way'). There are some that it doesn’t work for. It has worked for me, and makes total sense – based on what I have seen so far.

I hope that helps encourage you to try Rails, or even consider it for your next project.

There are many awesome tutorials out there, for starters I would use Rails for Zombies. I am in no way affiliated with them, I just love their product.

You should follow me on Twitter here, and read my blog here.

 

(download)

 

 

8 Aug 2011

Updates to Pricing

It's been a while since I have posted, but we have been busy with our heads down trying to make it rain.

We have heard you loud and clear. The original pricing was too high for freelancers. As a direct result of reams of feedback we have gotten, today we are rolling out new options - we have also simplified the plans and choices.

Updated-pricing

The marketing page is much more streamlined, with tighter copy that more accurately reflects the solution we are providing. If you have any suggestions on how we can improve it, please let us know.

We have also rolled out the payment functionality, and fixed a few bugs you so faithfully reported.

If you encounter any more, please feel free to let us know.

Thanks for your continued support. 

P.S. You can follow us on Twitter here.
4 May 2011

Video Tour of CompVersions Released

One of the most requested things since launch has been a video tour of the interface.

I am excited to announced that it's finally done and has been released today!

Check it out and let me know what you think:

Tour of CompVersions.com from CompVersions on Vimeo.

28 Apr 2011

Learning Ruby on Rails, CSS & jQuery - Building a webapp for designers (Part 2)

This is a series of posts, where I detail how I built CompVersions and what choices I made along the way.

In the first part of this series I spoke about the legal side. Now I get into learning the development-side.

This has been an interesting journey, I set out to build a webapp and took the plunge to learn everything myself (from a coding perspective). This is what my development environment is:
For learning Rails I tried MANY things:
  • http://ruby.railstutorial.org/ (this was a nice first primer, but given that I was learning Rails from scratch the issue I had with this tutorial is that it forces you to learn Test Driven Development - which for me was too much to learn everything at once. So I skipped over all the Test related stuff, and picked up what I could from everything else).
  • http://railsforzombies.org/  - this is pretty awesome, because it doesn't involve Tests and takes you into the core of Rails 3 from day 1. I highly recommend this for anyone just starting Rails development.
  • I tried a few ebooks - and they are nice for rounding out your knowledge (once you have a solid understanding of the Rails way) and giving you an alternative perspective, but they never quite got me to fully understanding the way things worked.
  • Asking Questions - mainly on Stack Overflow and #RubyOnRails on IRC.Freenode.net, port 6667. Every now and then, I will ask a question and get a WONDERFUL answer. Not only did his response clear up some stuff in my mind, but I have since used his advice about looking at other live examples.
  • Bookmark and constantly refer to multiple git repositories. Specifically the Facebook competitor Diaspora, Sassy, and Shapado
  • Railscasts are awesome, once you have the basics under your belt. They really help you do specific stuff in Rails.
  • Just diving in. CompVersions was my first Rails app, and it has been a steep learning curve. Very steep. But I feel MUCH more fulfilled having done everything the hard way. That approach might not work for everyone else, but that's what has worked for me.
  • I must confess that I never focused on learning Ruby, but now that I have a certain foundation in Rails and a bit of Ruby under my belt, I do plan on learning more Ruby.
  • Ironically, writing about my learnings also helps. There is something about explaining that forces you to understand what you are talking about.
I also had to learn (and am still learning) jQuery which I pretty much took the same approach.
Here are some additional CSS resources I used in my journey:
I apologize if this is too much of a link dump, but people constantly ask me what resources I used to learn everything and I have not been able to point them to one comprehensive place for me. But now I do :)

The next parts will dive more into services used and such.

Look forward to hearing from you in the comments.


Marc Gayle
www.marcgayle.com
www.twitter.com/marcgayle

21 Apr 2011

Building a webapp tailored to designers - Part 1

This is a multipart series where I will discuss some of the decisions made so far, and answer some of the questions I keep hearing over and over again. So either follow me or CompVersions on Twitter, or subscribe below to get notified when the other parts are published.

This first post is about setting up a US-based entity, although I am based in Jamaica, so that I can accept all major credit cards (Visa, Mastercard, AMEX, Discover).

CompVersions.com is owned by CompVersions, Inc. CompVersions, Inc. is a wholly owned, Delaware registered subsidiary of my Jamaican company.

Although I live in Jamaica, the world is my oyster, so I am targeting design agencies and firms outside of Jamaica.

The first thing I had to do was come up with a name. Why CompVersions ? Because, in the US and other developed markets, the graphic that a designer sends a client is commonly called a 'comp'. Short for 'Graphic Composition'. Mockup is also used frequently. The point of CompVersions.com is to allow designers to show multiple comps (i.e. many versions) to their clients and get feedback easily. So CompVersions works nicely for that. Plus, it is self-explanatory - given that you know what a 'comp' is. 

It also works nicely, given that it can be used as 'Compare Versions' - which is pretty clever if you think about it - but I honestly can't take credit for that one. That one was pure happenstance. Good luck, if you will.

Once I had the name, I bought the domain on GoDaddy and all closely related domains (actually, just 6) - the singular and plural version of compversions.com, .net and .org...i.e. compversion.com & compversions.com, etc.

I believe I used a coupon code from Revision3 for the bulk domain purchase, and everything came up to less than $100.

The next step I had to decide was whether or not to register a company in the US, given that I had a company in Jamaica. I tried everything (from opening a paypal account, to registering for 2checkout.com. But somewhere along the way, I always ran into an issue given that I am a Jamaican company. So I decided to bite the bullet and register in the US.

The next question is which state and how ? Do I go and do everything myself or do I go through an attorney. I was initially going to register in Florida, because that's where my US mailing address is, but I remembered that if I were to ever raise money in the future, the investors would prefer that I be registered in either California or Delaware.

I was reading up on Quora and found a response to a question about a similar issue, by an attorney (Dana Shultz) that gave a pretty good answer. He was based in Silicon Valley and he seemed to understand the startup space.

I found a link to his blog and was struck by the good advice he gives away for free. To top it off, he plainly stated what his rate for incorporation was ($2K) and what you get for it.

I decided to get in touch with him, and told him some of my concerns (I wanted to make sure that the company is a wholly owned subsidiary of my Jamaican company, etc.) and he assured me that he could take care of it no problem - and advice was included in the rate.

So I bit the bullet and paid the $2K - you pay in advance, but it goes to a neutral third party that holds it in escrow until all services are rendered.

Was. The. Best. $2K. I. Have. Spent. In. A. While.

I had so many questions, and he calmly and patiently answered all of them. Everything was also pretty quick and he gave me all the documentation I need (Bylaws, Share Certificates, etc.). He handled everything and when I was reading he answered all my questions. 

Wonderful service and I will definitely be using Dana for more legal services in the future.

To top it off, he sent me this wonderful set to keep my corporate records in. I am sure that this is probably standard operating procedure, but given that it is my first 'startup', I felt like a kid in a candy store when I received the FedEx. 

He also offers an EIN service, but honestly it is so easy to do it you might as well save yourself the money - if you have the time that is. It's not TOO time consuming...maybe an hour, MAX.

All you do is go here: http://www.irs.gov/businesses/small/article/0,,id=97860,00.html get the toll free number: (800) 829-4933 (you can use Skype or Google Chat if you have free minutes). Tell them that you just registered a company and would like to get an EIN to pay taxes (they love to hear that) and someone will ask you a number of questions and give you your EIN right over the phone. It's a pretty seamless process. It's also free, and they will then follow it up with a card in the mail. You need to have a US mailing address.

The next step is getting a US bank account. 

Once I had my EIN, and incorporation documents (which Dana sent back to me in literally about less than 48 hours - business hours that is), I tried Wells Fargo first, but they then referred me to Wachovia because your bank has to have a branch in the actual state you registered - or that's the way Wachovia & Wells Fargo does it anyway.

So I went to Wachovia's Small Business and called and spoke to someone. Explained to them that I wanted to open an account, and they took care of me. I had to send a bunch of documents back and forth - printing, signing, scanning, emailing - along with ID, etc. But the entire process (between delays for me to sign everything and get it back) took about 3 - 5 days - although it could have easily taken shorter it was I that held up this process. I guess the thought of printing out 3 sets of 8 page documents to read, sign and re-scan was a bit daunting so I procrastinated.

Once I did that, got that setup and setup two business accounts (one I use as the merchant settlement account, the other I use as a regular business checking account). I believe I qualified for a free account (or no fees for the first X days). I just checked and saw an 'INT'L Service Fee for $0.20' so I might have to look into that. Not for the amount, but am curious what the fee means.

Then once I did that, I wired money to the account to fund it - which Dana suggested was best to make the share transfer look 'legit'. So I did that. You can work with him to figure out how much you can manage and see how you can get it to work. He had suggested $5K initially, but I couldn't manage that, so I ended up doing about $1K.

Now the next step is to get a merchant account, then a payment gateway provider. Wells Fargo offers a merchant account, and Authorize.net is a payment gateway provider - but I have heard enough stories about Authorize.net to know that I would try and avoid them as much as I would try and avoid Paypal. Who knows, maybe in the future I might have to use them, but I will try not to - if I don't have to.

I decided to go with BrainTree Payments. I had to register in the US to be able to use Braintree, so that also was another motivation for me to just register and get it over with. People complain that their fees are high, and they might be a bit higher than some of the others, but the truth is that I have gotten very good service from them. They also have a Ruby API which was all I needed to hear. Given that I am just learning Rails, I had (and still have) A LOT of questions and they have been more than gracious with answering them in a polite manner and been pretty quick (during business hours). 

The kicker with BrainTree is that they offer both a merchant account (which is the account that your money goes to once it has cleared) and a payment gateway all-in-one.

Even more importantly, I don't want my users to leave my site when they are paying with their credit card but I don't want ALL of the headache of being PCI Level 1 Compliant. Braintree has exactly that solution, which they call Transparent Redirect.

I am still working out the kinks with them, but this was a major reason that I decided to go with them. The wonderful support, Ruby API, powerful existing client list (from 37Signals to Github), and everything else is just an added bonus.

Their pricing is pretty straight forward too - http://www.braintreepaymentsolutions.com/pricing - well straight forward in comparison to the others I found when looking around.

I have not gone with a recurring billing provider like Spreedly or Chargify, for two reasons. Spreedly doesn't do a transparent transaction (like Braintree does), or rather, I haven't found out how to do that and couldn't bother learning two new systems than just one. Chargify doesn't support Braintree....so that was a no-brainer.

Here is an example of the awesome customer service, a few hours after I launched I get this email from Braintree:

Ben Mills, Apr-18 15:42 (CDT):

Hi Marc,

I just saw on Hacker News that you launched Compversions! I just wanted to say congratulations from the team here at Braintree.

Let me know if you need anymore help with your integration.

Ben Mills
Braintree Developer

Something so simple, says so much. Just for starters, my Merchant Account + Payment Gateway provider reads Hacker News? (+1). To put this into perspective, when I was called by Wells Fargo about a merchant account solution they offer, I had to explain to the guy (lovely guy by the way, very polite and professional) what a web application was - much less what CompVersions does. So I really should give Ben a +10.

So that's it...a bit long, I know. But I tried to be as comprehensive as possible. I don't think I have missed anything. If you have any questions, comments or concerns, be sure to let me know and I will do my best to address them either in the comments or I will add to this post.

In the next parts I will go into what I use for my infrastructure, who my providers are and what my experience has been like with them so far, etc.


Marc Gayle
www.marcgayle.com
www.twitter.com/marcgayle

(download)

5 Apr 2011

Traffic Stats from Two Guest Posts

Aside from having to learn Rails from scratch to build CompVersions, coming up with a marketing strategy was the second most important thing I had to do. From the get-go, I embraced my constraints (bootstrapping, so not flush with cash) and decided to go with the tried and true method of the online version of 'working in the trenches'. What that mainly entails is going to where my audience is and interacting with them.

My target audience is designers/design firms - more specifically, designers/design firms that have a number of clients and need to get feedback from all of them easily. So I decided to go directly to the blogs that I know they read. Two of those are Six Revisions and Think Vitamin.

I approached both with an aim to do a guest post, because I saw an interview with Chris Nagele - the founder of Beanstalk on Mixergy - and he praised the guest post strategy as a way of generating long-tail, long term organic traffic for Beanstalk (this is the post he did, by the way if you are interested). So I figured I would give it a try. 

I did two articles, and here are the results from both and my analysis of each.

This is a graph of comparison of traffic between the two sites over time from Compete.com:

Screen_shot_2011-04-05_at_4

What I have done is given taken screenshots of the analytics from the day before the article to 10 days after the article was published and compared accordingly. Without further ado, here goes.

Think Vitamin
(download)

 

Think Vitamin Summary
Date of Publication: Feb, 15, 2011.
Traffic Dates: Feb 14 - 25, 2011
Total Unique Visitors: 535
Total Sign-Ups: 22
Conversion Rate: 4.11%
General Tweets: 66
Facebook Likes: 3
Tweets from TV Account: 0
Comments: 2 (1 of which was mine)

Six Revisions

(download)

Six Revisions Summary
Date of Publication: March, 25, 2011.
Traffic Dates: March 24 - April 4, 2011
Total Unique Visitors: 1850
Total Sign-Ups: 105
Conversion Rate: 5.68%
General Tweets: 369
Facebook Likes: 48
Tweets from SR Account: 4 (1 directly related to the post, and 3 others responding to myself and other readers about the article)
Comments: 28 (5 of which were mine)

Conclusions and Analysis

I am extremely pleased with the performance of both articles. Perhaps the week that my article got published on TV was a 'big news week', so that could have attributed to the lower traffic. That could have also been why it wasn't Tweeted or got any social media love from the TV team. One thing I did notice though is that the post only got top position on TV for about 30 minutes - after which it was quickly shuttled down to #4 and further down shortly thereafter as other posts were published on the same day. Whereas with SR, it got #1 position for a day or two, and then went down one spot each day for the next 4 or 5 days until it fell off the main page.

As a result of the Twitter activity from @sixrevisions, my Twitter following increased almost 15% - I gained about 35 followers from about 280.

I am not sure if it is the subject matter or the audience, but the audience seemed much more engaged on SR - I got multiple emails from people enquiring about many things from additional resources on learning Rails, to questions about CompVersions, to just general encouragement and telling me that they liked the article.

Finally, here is the graph I am most excited about - it is from Campaign Monitor that shows the subscriber growth over the past few months. As you can see from Jan 11 to the next green point (Feb 11) the growth curve gets a bit steeper, but from Feb 11 to March 11 the growth curve gets even steeper.

General-subscriber-list-signup

Of course, these are just subscriber info to a mailing list to find out about launch info - so the real proof will be in the pudding when I launch. But this data is pretty encouraging.

Hope you found this as interesting as I did. If you did, you should follow me on Twitter here.

 

 

 

 

 

21 Mar 2011

Financial Spreadsheet for your Startup

Ryan Carson created and released a spreadsheet model which is extremely helpful for startup founders and management to help get a good idea about the health of the company. I will not be explaining what he did, so if you want some background, I would recommend you read his article first – to understand what I am talking about here.

I am getting ready to launch Comp Versions any day now, and one of the last few things I had to do was to sort out my financial dashboard. I used Ryan’s spreadsheet and took it a bit further.

A Quick Rejig

The first major thing I did was re-organized the line items so that the structure more accurately resembles that of an Income Statement – which I am more accustomed to reading. For example, here is Apple’s. What you will see is that all the revenue related items are at the top, then the first thing deducted from the revenues are the costs of those revenues.

Those things are typically variable drivers specific to that revenue. So in Apple’s case, that would be things like inputs needed to actually create Apple’s products (the material needed to create the unibody of the Macbook Pro, or the glass for the face of the iPhone/iPod/iPad, etc.). As they sell more Macbooks they have to buy more of that metal for the unibody. The same applies to the glass. All monies paid to their manufacturers also go in this line item.

Ryan’s original version lumped more general things in ‘COGS’ (Cost of Goods Sold). Specifically salaries. Salaries belong further down the income statement. If you are looking at Apple’s Income Statement, they typically get lumped in the line item ‘Selling/General/Administrative Expenses’.

So in my modified version, I still have the breakdown of customers, churn, etc. at the top because all of those are revenue specific. Then for ‘Cost of Goods Sold’ for webapps, you typically have hosting costs (I broke them down into two separate categories, variable and non-variable).

Hosting Costs

Variable Hosting Costs are any hosting bills you have to pay due to higher usage (on a per unit basis). So in my case, since designers will be uploading images and they will be stored on AWS & CloudFiles, my variable hosting costs are not my regular server costs. They are costs associated with both AWS & CloudFiles, because I only incur them when people upload images.

Non-variable hosting costs are server related costs – so if you rent a server with Rackspace, your monthly Rackspace bill would go here. Now I know this might be a bit confusing, because if 1 server can only manage X amount of traffic (say 500,000 uniques per month), if you double your traffic you will have to add more servers.

However, you don’t have to pay hosting costs per unit. In this case, you don’t get charged by Rackspace per Unique Visitor. That’s the major difference. For instance, for the same monthly fee you pay for 1 server, you could tweak the server so much that you increase the # of visitors it can manage to say 750,000 unique visitors without paying anything extra. With a true variable cost, you can’t do that.

Gross Profit

I also added Gross Profit lines. These lines are very important because you need to get an idea as to how one of the most fundamental costs of your businesses are working. For instance, if you are experiencing phenomenal revenue growth, but your gross profit margins (%) are reducing, you know that likely indicates that your Cost of Goods Sold is increasing – which should be a worrying trend.

Usually what happens is as you push more volume, your unit costs should come down significantly. Not just in the tech industry, but in most (if not all) industries. So while your revenues are increasing, your COGS should be decreasing – for instance, if you look at the pricing chart for AWS you will see the cost per GB reduces as you go up in volume.

Screen-shot-2010-12-30-at-2

However, at some point in the future – it might become less beneficial to host my images with Amazon rather than hosting it on my own. 37Signals is famous for discussing outgrowing Amazon’s web services for their primary storage – because it has gotten too costly. I suspect, this is likely what happened. At some point, they realized that their Gross Profit Margins are getting thinner and thinner – which would cause them to look at the variable costs associated with their revenues. If it didn’t, it should have.

So in my case, I suspect that at some point in the future, my gross profit margins will stop decreasing and start increasing again. At that point, I will want to look at other options.

COGS (Cost of Goods Sold)

I added a ‘COGS’ sheet, which breaks down the entire Cost of Goods Sold. If you have other variable costs (aside from the ones I have included) this is the sheet you will want to update. Once you update that sheet, you can then link it to the main sheet with a line item that has the total of the new variable cost, and update your Total COGS.

At the top of the main ‘Figures’ sheet, I added the breakdown of the pricing plans and the distribution of the % of customers on each one.

Screen-shot-2011-01-16-at-2

This is to give you a quick overview for which plans make sense and which don’t.

On the COGS sheet, I also broke down the Gross Profit ($ and %) of each plan – which can quickly tell you which plan makes most sense for you. With my default numbers, you can see that the gross profit margin (%) reduces steadily as the plans increase in cost.

Screen-shot-2011-01-16-at-2

That is because I chose to give each plan more space and transactions (relatively speaking) – for the purposes of this article, that is. So the $99 plan gives more than double the storage space than the $49 plan does. As a direct result, you can see that the gross profit margins (%) decrease from 89.69% to 89.14%. This trend continues as you go up in price. So even though you are making more money per plan, you aren’t keeping as much as the lower plans. This is an important figure to watch as you decide to tweak your pricing and value proposition.

Please note though, that the Gross Profit amounts in the ‘COGS’ sheet are plan specific, and do not include transaction fees (e.g. Paypal, credit card processing, etc.) and other things included in the true COGS from the ‘Figures’ sheet.

Quarterly to Monthly

Lastly, another key change I have made is getting rid of the bottom section that spells out some key metrics quarterly. I have put Net Profit (% & $) monthly, and have re-calculated CACR monthly. I have very low marketing costs – because I am bootstrapping, at the onset – but I expect to boost those significantly. As a result, my CACR ratios look pretty high early on. But that will change as we progress.

Please remember that all of the figures here are just placeholder default values – that are approximates according to my needs. Feel free to tweak, add, subtract, multiply & divide as your needs see fit.

See for yourself

To see the spreadsheet online, go here: http://bit.ly/compversions-spreadsheet

If you liked this, you should follow me on Twitter.

This post was originally written for ThinkVitamin

22 Jan 2011

A flaw of the freemium model

One of the many things I have been debating is whether or not I want to do a freemium model for Comp Versions. I am not a big fan of giving away too much for free, mainly because I am a one-man shop and have extremely limited resources. One of the major benefits of freemium is the idea that free users will convert to paying over time. This works for some services, where the cost/pain of switching is too high/great. Evernote, where you store all your thoughts and jottings - has been famously successful with converting users - because by the time you exceed the limits on the free account, you can't imagine leaving so you upgrade. The same thing applies to Dropbox - for file sharing and syncing across multiple machines.

However, the folks over at 37Signals don't seem to agree. They have found that regardless of how long users have been members, they still don't convert.

All of this stuff is well known. 

What just occurred to me the other day though, is that not only is the free service expensive to offer from a Cost of Goods Sold perspective ( in that users use bandwidth, storage space, etc. ) - but it is extremely important that in order for the users to convert, they need to receive good service. So that adds another cost, which is even more costly because it involves human contact. I realized this after a bad experience with Heroku. This isn't a rant post, but it occurred to me that I am just a free user, so technically they shouldn't really deploy too much resources to support my requests. They need to tend to paying customers. But this is the inherent trap/flaw. If they don't allocate enough resources to make sure I am pleased with my experience (especially my first experience), there is a lower probability that I will become a paying customer.

Who would hand over their money to a service that treats them like crap? Granted, in my case, I complained about the quality of the service and a wonderful Support Manager - Christopher Stolt to be exact - came to my aid and apologized for the service failings. If I were not building my own app and thinking about quality of service, etc., I would have not complained but just taken my business to Engine Yard or rolled my own VPS - without mentioning anything. But I did and got better service.

So this begs the question, if your future new paid users are your current non-paid users, how much resources do you allocate to them? I don't know yet, but what is obvious is that supporting free users like this drains on the precious resources and gross profit margins of the app/company. Especially given that a significant portion of the free users will never convert. Evernote, the wild success of converting users from free to paid over the long term, is only able to convert 20% of their free customers to paid in the first 2 years. That leaves them having to deploy human support resources on, say 50% - 60% of free users that will never convert. 

Talk about throwing good money after bad!


You should follow me on Twitter here.

 

29 Dec 2010

Aim to have no value creation reset clock

One of the most eye-opening experiences for me, since I started working on Comp Versions full time, was the notion of the 'value creation reset clock'.

Every morning, when you wake up - as an employee for someone else - the value you created yesterday fades into distant memory and you have to create new value today.  If you are a new employee and on day 2, you completely slack off....there is a high probability that in very short order you will be unemployed. If you are a long-standing employee that has consistently created value for the company, to a significant degree, you would have created a buffer in your value creation clock. Meaning, if you slack off for a day or 2, it's no big deal. If you slack off for 1 month (not including sick days and paid time off), things start to become shaky. 3 months in a row, you really are testing the outer boundaries of the patience of your overlord.

It is the manifestation of selling 'time' for money. Your value creation clock resets every morning at 8am.

Contrast that with the scenario of an internet software startup founder. The first few months/years are insane - in terms of stuff that you need to get done, but if you don't do anything today (provided that you have done everything else in the past to the best that it can be done) your business won't fall apart. Every day the value I create for that day, is cumulative. If I fix a bug in my UI, I will never have to fix that particular bug again and everybody else from now until the UI is scrapped will reap the benefit of having the UI work like it is supposed to. That value is almost immeasurable. The same thing applies when I write a blog post, either a guest post for another blog or for my personal blog. It stays out in the ether and Google indexes it and constantly sends people to that post - and subsequently to my site. Forever! 

My value creation clock never resets. 

Every designer I meet and talk to, I am building goodwill that won't disappear until I mess it up. Every prospective customer I talk to, every developer I ask for advice, every small thing I take care of - compounds.

This concept is similar to what Albert Einstein was referring to when he said that "The most powerful force in the universe is compound interest."

While I haven't launched, should be doing that soon :), when people ask me what I love about working for myself my answer is always the same: "Because I have no value creation reset clock."

You should follow me on Twitter here.

Comp Versions's Space

Designers: Help your clients make faster decisions and your life easier.

Compversions allows you - as a designer / photographer / creative - to easily show your clients multiple versions of your work - so they can make decisions faster, your projects end quicker, your life is easier.

I also blog at marcgayle.com

Contributors

Marc Gayle