ChangeLog – Jon Chase's blog Entrepreneur and geek - a dangerous combination! I'm living my dream - running my own software business and working on its second app - EverySingleShot.com.

- Jon Chase

01 February 2010 ~ 0 Comments

ChangeLog #1: hacking, branding, and EC2

ChangeLog #1: hacking, branding, and EC2

Total earnings as of February 1, 2010: $0

I’ve been busy the last few weeks working on many of the things it takes to turn Every Single Shot from an idea into an actual product.

The last few weeks of work have been really, really fun. Not only have I been coding Every Single Shot, I’ve also worked on branding and setting up hosting. Every day is a different job and I’m really digging the variety. Here’s what I’ve been working on lately…

Development

Where would a web app be without code, right? I’ve spent a fair amount of time in my IDE hacking away to get a basic app up and running (ESS is written in Groovy and Grails). Here’s what I’ve got so far:

  • Public facing marketing site: home page, tour, sign up, contact us
  • App pages: photo browser, photo uploader, account settings, and a few others

I’ve still got lots of functionality and features to add in – lots. Security is going to be a big one coming up. Another is integration with Amazon’s S3 (more on that below). Oh, and I also need to remember to add in actual features that users care about as well. :)

Here’s the current LOC (Lines of Code) count for ESS (from running grails stats):

+----------------------+-------+-------+
| Name                 | Files |  LOC  |
+----------------------+-------+-------+
| Controllers          |    14 |   803 |
| Domain Classes       |    15 |   266 |
| Jobs                 |     2 |    59 |
| Services             |     3 |   105 |
| Tag Libraries        |     4 |   205 |
| Groovy Helpers       |     3 |   116 |
| Java Helpers         |     3 |    81 |
| Unit Tests           |    29 |   374 |
| Integration Tests    |     1 |    40 |
+----------------------+-------+-------+
| Totals               |    74 |  2049 |
+----------------------+-------+-------+

ESS’s code base is surprisingly small right now – that’s part of the beauty of Grails.

Branding with a graphic designer

This marks the first time that I’ve paid someone to help me with my business, and I couldn’t be happier with the job Christine did (and is still doing). And it was fun. Really, really fun. To see an idea go from floating around in my head to something real was a very rewarding experience. I’m so glad I decided to pony up the money and pay a professional to help with the branding and UI – I can guarantee that any design I would have come up with would have scared away any potential customers. :) Given my target market (young fiancés), I knew the design for ESS needed to look good. Mission accomplished!

Here’s the final logo for ESS that Christine created:

Every Single Shot logo

See if you can figure out why I didn’t want to do the graphic design myself from the example below.

I needed to put up one page at www.everysingleshot.com just to collect email addresses for my mailing list. It needed to be simple, quick, and get the job done. Here’s my take (click images for full size screenshots):

Before a graphic designer's touch

And here’s the version I made after some help from Christine:

After a graphic designer's touch

But Christine didn’t just whip up some nice graphics, she also did great work with helping me define and focus ESS’s brand and marketing message. As a developer first and a marketer last, I can’t understate how important it was to have a creative branding person helping me with this aspect of ESS. I’ve been doing a lot of reading on branding and marketing and I recognize their importance in creating a successful product, so I’m really thankful that Christine was able to help me so much with them.

Contact me (jon at juliesoft dot com) if you’re interested in having Christine do some work for you (I don’t want to plaster her email address on here) – I’ll forward your contact info to her.

Hosting on Amazon’s cloud

I used a combination of cloud (Amazon’s EC2) and traditional (eApps) hosting platforms for SendAlong. It worked well enough, but I didn’t like having to manage the two different environments. Plus, the apps on the different platforms needed to talk to each other, and getting them to communicate reliably all the time was kind of difficult.

This time I decided that I wanted to keep the hosting platform homogenous. I also decided that there were at least a couple of different “cloud” services that ESS was going to use such as storage (like Amazon’s S3) and a CDN (like Amazon’s CloudFront). I researched a few different cloud hosting providers including Amazon EC2, Slicehost, Rackspace, and Joyent. I also found a great performance comparison of some cloud hosting providers.

Amazon and Joyent were the front runners, but I decided to go with Amazon mainly because they’re stable, they’ve been around the block a few times, they’ve got good documentation, they’re fairly easy to use, the nice integration between all of their services…the list goes on. I’m not saying Amazon’s services are right for everyone, but they suit my needs for Every Single Shot really well.

After choosing a hosting provider, I needed to get a server set up. That’s where the real fun came in. (If you didn’t know I was a geek, the last two sentences are all the proof you need.)

I’ve dabbled in Linux and the bulk of my command line experience has been in MS-DOS. I’ve had a Mac for the last year and have gotten a little more comfortable with using a real command line, but all of that experience was nothing when stacked up to what I learned in the last two weeks while trying to build out a server with all the goodies ESS would need on EC2. I wouldn’t have said that I was a command line n00b before two weeks ago, but now I think I can back it up. Where have pipes, grep, and shell scripts been all of my life?

While I was working on configuring an Amazon EC2 AMI to my liking (Apache, Tomcat, MySQL, etc.) I came across a fantastic EC2 resource. If you’re running Ubuntu on EC2, or are trying to figure out what OS to use for your EC2 set up, have a long look at Eric Hammond’s alestic site. Not only has Eric provided some top notch Ubuntu server AMIs, but the Canonical team (the people behind Ubuntu) has really embraced Amazon EC2 and provides several “official” Ubuntu AMIs to get started with. I feel completely comfortable using these things in production – it’s obvious that the Canonical team has put in a lot of work on their Ubuntu AMIs.

The coolest thing about these Ubuntu images (I’m using ami-1515f67c on an EC2 small instance, btw) is that you don’t have to rebundle your own AMI on top of them (if you’ve worked with EC2 in the past you know what I’m talking about, and if you haven’t, then just trust me that this is a good thing). This is where I learned about the wonderful world of apt-get, which handles installing a lot of common software for you. Having used Windows most of my life, I’m still not used to this, but package managers are one of the best things about the Linux platform. Need to install Apache2? sudo apt-get install apache2. Need to install Tomcat6? sudo apt-get install tomcat6. Of course you’ll need to customize the installs sometimes, but that’s just a matter of writing a shell script.

Since there’s no need to rebundle your own AMI, there must be a way to configure the base AMI easily, right? Indeed, and of course Eric Hammond has already taken care of that for me. With literally one command, I can launch an EC2 instance (for test or prod), attach a static IP address to it, attach a persistent EBS volume to it (for storing MySQL data), install every software package I need (Apache, Tomcat, MySQL, etc), check out ESS from source control and build it, and have it up in running in about 5 to 10 minutes. This means that when I’m ready to test a new version of ESS, I can issue a command to do all of the above, plus run through all of my automated tests. As long as testing takes me less than 60 minutes, total cost out of pocket is 10 cents.

Yes, I’ve heard that Amazon’s EC2 isn’t as fast as some of its competitors. I’m willing to live with that for now, especially considering that I can run a new server with 10 times the RAM and CPU power with a single command if I need to.

(I’m going to write another post about EC2 and the other Amazon web services in the future that will have lots more helpful information – so remember to subscribe to my blog if you haven’t already.)

Timeline and goals

I need to get a beta out soon. I’ve been developing in a vacuum for too long. My goal is for a February 15th beta release, then rapid iterations based on user feedback (sign up if you want to help), and then a 1.0 release on April 1st. That should give ESS some time to get a bit of marketing traction before the heavy wedding season starts in May.

I’ve got big plans for ESS, so I’ve set some stretch goals.

  • Goal #1: 10% of income will go straight to charitable causes (that’s pre-tax, pre-expense income)
  • Goal #2: 100 new paying customers per month by July 1st, 2010

Do you have a suggestion on how I can improve these goals? Leave a comment and help me out!

See you next week!

07 December 2009 ~ 4 Comments

Time for a change

Time for a change

The past

I’ve been blogging here since December, 2006. In that time, I’ve covered lots of random topics, including building my first product. I haven’t (yet) blogged about shutting it down, but that topic is on the short list to cover soon. The last three years have been good, but things are about to change.

During the 3+ years I’ve been blogging I’ve never had a plan for the blog. If something caught my attention, I wrote about it. There was no such thing as “off topic”, because there was also no such thing as “on topic”. Although it’s been fun for me to write the blog, the quality of the content has suffered for want of editorial direction.

That’s changing as of now, and here’s why.

The present

I’m working full time on a new web app. Every Single Shot isn’t a side project. Among other things, it’s my full time job. Some might call this kind of set up a microISV, some might call it a start up, some might even call it a mom and pop joint (ok, no one would ever call it that). I realize that I’m very, very lucky to have the luxury to be able to work on my business – my dream – full time. I also realize that this is just the kind of thing that a lot of other hackers dream about on a daily basis while they’re stuck at their dead end jobs. This is why I’ll be sharing the details of my adventures from now on.

797px-Monarch_Butterfly_Cocoon_2

The future

I’ll be chronicling my journey on a weekly basis, talking about what I’ve been working on, ideas I’ve had, and changes that have happened. That’s why I’ve renamed the blog to ChangeLog. (Actually, I’m not renaming it, I’m naming it. It hasn’t had a name until now because it hasn’t had any direction until now.) Just as a stereotypical changelog is to code, this blog is to me and my business: a place to record changes and happenings of interest.

It will be more than just a ChangeLog, though. I’ll still be talking about Groovy / Grails (Grails is hands down the best web framework out there IMO, and I’ll have words with anyone who says otherwise). I’ll be talking about small business, marketing (lots of marketing), branding, site optimization and testing, e-commerce…the list goes on. But instead of talking about this or that with no context, I’ll filter future posts through the lens of my business and its products. Less noise, more insight – that’s what I’m shooting for.

Since this post is meant to be a turning point in my blogging journey, I thought I’d finish by linking to one blog that has influenced me greatly up to this point. This blog is one of my absolute favorites – the kind I where I read every post from start to finish, regardless of content, because invariably I learn something. You should be reading this blog.

Balsamiq blogREAD THIS BLOG!

(I use Google Reader to manage all of my blog subscriptions. If you’re not using an RSS reader to keep updated on blogs, I suggest you check out Reader.)

If you haven’t already, please consider subscribing to the ChangeLog RSS feed and/or following me on Twitter (@jonchase).

Do you prefer blogs that have a specific focus, or those that are a bit more random? What do you think of the direction I’m going to take my blog? Leave a comment below and let me know.

Cocoon picture courtesy of Greyson Orlando via Wikimedia.

18 November 2009 ~ 1 Comment

Marketing Books for Small Businesses

Marketing Books for Small Businesses

Someone just posted a question over on the Business of Software forum asking for recommendations on books and blogs related to sales. Since I’ve been doing a lot of reading on marketing (I know, marketing isn’t sales, but they go hand in hand), I figured I’d post my reading list so that others might benefit.

Here are the marketing books I’ve read recently:

Here are a few books that I haven’t read yet but look good:

Happy reading!

And no, the above are not affiliate links. :)

What about you? Read any good books (marketing/sales related or otherwise) lately? Leave a quick comment below and share them with everybody.

01 November 2009 ~ 8 Comments

Double your productivity with 1 tip

Double your productivity with 1 tip

Starting a business is a lot of work, especially when you’re doing it all yourself. I need all the hours I can get in a day, so I came up with a handy little practice that’s really increased my productivity. Yes, I’d even say it’s doubled it (hmmm…does that mean it was abnormally low to begin with?). Your mileage may vary, of course, but if you follow this advice and stick to it, it’s just about impossible to not see your productivity go up.

The Trick

So what is it? What is the miracle of productivity tips that has naught been divined hence?

Simple: when you sit down to work, set a timer. Work your butt off until that timer buzzes, then take a break. Lather, rinse, repeat until it’s time to go home. Let me explain.

I find I can concentrate steadily for about 2 hours at a time. So I set the timer for 2 hours. Once the 2 hours is up, I take a 15 minute break (using the timer), during which time I’m checking blogs, twitter, Facebook, or most importantly – playing with the dog. Lunch time is a little different – I typically take 45 minutes to an hour. I get in four quality 2-hour work sessions every day with little to no distraction. This, in my opinion, is awesome.

How it Works

Why does this work so well? For me, it’s the assurance of knowing I’ll be able to goof off soon enough. That way, I feel compelled to concentrate for 2 hours because I know I’ll be immediately rewarded at the end of it. But during the breaks, anything goes, and since I’ve just worked for 2 hours, I don’t feel guilty goofing off a bit.

Timers to Try

If you want to give this a try, I can recommend a few timers. If you’ve got an iPhone or iPod touch, just use the Timer app that comes with it (make sure you turn the volume up so you can hear the timer go off). If you run OS X, give a timer dashboard widget a try. There are two that I like: Stop It! (my fav) and Tea Timer. If you run Windows, uhhhh…do you own an egg timer? :)

Bonus

Bonus tip: write your todo’s for the day down. Tackle the tough creative ones in the morning (especially the ones you’re dreading). You’ll feel a since of accomplishment and be motivated to do the boring stuff. Do the administrative stuff and email after lunch.

Bonus bonus tip: don’t do personal email at work!

What do you think? Do you have any easy productivity tips of your own you’d like to share? Comment below!

26 October 2009 ~ 1 Comment

The 22 Immutable Laws of Branding – Summary

UPDATE Looking for more marketing books? Here’s a list of good ones that I’ve read recently (or am planning to read).

I just read The 22 Immutable Laws of Branding and was happy that I set aside a couple of hours to do so.

I’m currently working on a new product and a lot of the material was relevant to me. I’ve read a few books on marketing, but nothing specifically on branding. This book has whet my appetite for more.

Here are my notes:

  • Generate publicity, not advertising. Best way to get publicity? Announce a new category, not a new product.
  • Claim your product is a "leader", not "better". All products claim they are better, but you can’t argue with leader.
  • Own a word. Like "luxury".
  • Perception of quality is built by a narrowly focused brand, a high price, and a better name.
  • Promote the category, not the brand, and be first in the category so that your brand is associated with the category.
  • Expand a brand, reduce its power. Contract a brand, increase its power.
  • Welcome other brands in order to build the category.
  • Generic brand name = bad
  • Select a brand color opposite of that of your main competitor’s.
  • Consistency is key. Never change your brand, ever.
  • What’s a brand? A proper noun that can be used in place of a word.

22 October 2009 ~ 4 Comments

Installing SpringSource Tool Suite (STS) with Groovy and Grails Support

UPDATE There’s an excellent article on the Grails website that walks through installing and using STS with Grails support. I recommend you use that guide instead of the one below.

STS 2.2.0 was released today with support for Groovy and Grails development. If you’re new to STS, the route to getting everything working might not be clear. The following walks you through installing STS, the Groovy plugin, and finally, the Grails plugin.

  1. First download and install STS. STS comes bundled with a full Eclipse installation, so you don’t need to download Eclipse first.
  2. Now for the Groovy plugin (required for Grails). Open STS, and go to Help -> Install New Software. Add the Groovy Codehaus site: http://dist.codehaus.org/groovy/distributions/greclipse/snapshot/e3.5/. Now install the Groovy plugin from the site you just added. I installed 2 plugins actually, the Groovy Compilers and Groovy-Eclipse plugin options. Restart STS when the install is complete.
  3. Now you can install the Grails plugin. In STS, go to Help -> Install New Software again. This time choose the Spring Source Update Site for Eclipse 3.5. Under Extensions / STS, choose the SpringSource Tool Suite Grails Support. Install and restart STS.
  4. Create a new Grails project by going to the new project wizard and selecting Grails Project under the Groovy folder.
  5. The project creation screen will say that you don’t have a Grails installation configured. Just click the Configure Grails Installations… link, then Add, then Browse, and navigate to <YOUR_STS_INSTALL_DIR>/grails-<version> and choose that directory. Then give it a name and click OK.
  6. Give the project a name and click OK to create a new Grails project. Give Eclipse a few seconds to finish creating your Grails project and you should be ready to go.

That’s as far as I’ve gotten so far. If you’ve got any tips or advice, please feel free to leave a comment. Here’s to hoping that the Groovy and Grails plugins are high quality!

20 October 2009 ~ 3 Comments

REVISITED: What is Right with Grails and Wrong with Maven

With regard to my previous post, it looks like I pulled the Maven command from an old set of documentation. I believe the preferred way to create a new Grails app with Maven is a command like the following:

mvn grails:create-app appName

I can’t say I don’t have anything against Maven, because I don’t like it. :) Personally I’ve had much better luck with Ant, but then I’ve never worked in a highly distributed team environment with lots of dependencies and builds that couldn’t be managed with a simple Ant script.

Let the holy wars continue…

15 October 2009 ~ 7 Comments

What is Right with Grails and Wrong with Maven

This just cracks me up.Here’s how to create a Grails app using the Grails command line:grails create-app demoAnd here’s how to create the app using the Maven command line:mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate -DarchetypeGroupId=org.grails -DarchetypeArtifactId=grails-maven-archetype -DarchetypeVersion=1.1 -DgroupId=example -DartifactId=demo

19 May 2009 ~ 0 Comments

Triangle microISV Group May Meeting Tonight (Tuesday)

Triangle microISV Group

This is your friendly reminder that the Triangle microISV Group is having its 5th meeting tonight (Tuesday, May 19th, 7pm, Southpoint Panera).

This will be our 5th meetup – the first 4 have been great – I think the people who have come have really enjoyed themselves and found it worthwhile.

Here’s the agenda:

The fifth Triangle microISV Group meetup will be on Tuesday, May 19th at 7PM in the Panera at Southpoint Mall.

General discussion topic still TBD.

The informal format continues to serve us well at our meetings. I’m not coming with any specific topics prepared, but feel free to bring up any questions or insights you’ve recently had. Have an idea and you’re wondering if it’s any good? Make sure to speak up!

Expect lots of chatting with other microISVers (or those wanting to take the leap) – you’ll meet lots of friendly and like minded people.

One last note – Meetup.com charges about $70 every six months for the ability to schedule these meetings here – our meetup will never require donations, but small donations are welcomed.

I’m looking forward to seeing everyone again (and new faces too) – see you all Tuesday, May 19th!

If you plan on coming, or are even thinking about it, please RSVP so I can get a rough head count. See you tonight!

24 March 2009 ~ 1 Comment

Triangle microISV Group March Madness Meeting this Wednesday

Triangle microISV Group

This is your friendly reminder that the Triangle microISV Group is having its March Madness meeting tomorrow (Wednesday, March 25th, 7pm, Southpoint Panera). For you NCAA fans, make note that there are no games tomorrow night, so you should be free to come to the meetup!

This will be our 3rd meetup – the first 2 have been great – I think the people who have come have really enjoyed themselves and found it worthwhile.

Here’s the agenda:

The third Triangle microISV Group meetup will be on Wednesday, March 25th at 7PM in the Panera at Southpoint Mall.

Basketball lovers rest easy – there is no men’s tournament play scheduled for the 25th. Use your one free night of the week for something constructive. :)

The informal format has served us well the past two meetings. I’m not coming with any specific topics prepared, but feel free to bring up any questions or insights you’ve recently had. Have an idea and you’re wondering if it’s any good? Make sure to speak up!

Expect lots of chatting with other microISVers (or those wanting to take the leap) – you’ll meet lots of friendly and like minded people.

If you plan on coming, or are even thinking about it, please RSVP so I can get a rough head count. See you Wednesday!