September 2007


One of the primary goals of this blog is to give people a peek into the life of someone who decided to work for themselves instead of pursuing a corporate career.  Back in college I wish I knew that running my own business was a career option.  And if I did know it was an option, I would have had a million questions for someone who was 25 and ran their own online business.  For most people, their entire life is structured for them - school, college, and work dictate what time they wake up and what they spend the majority of your days doing.

It’s both invigorating and scary at the same time to have to create your own schedule. A lot of the work I do doesn’t generate revenue today, tomorrow, or maybe even this month or year - we’re putting systems in place that will make it easier for our company to succeed as we scale in the coming years.  With that it’s very possible to be complacent, and even the best of us struggle with that.  Being that it’s been nearly 2 years since I left my job, I’ve tried every different type of schedule to try to maximize my productivity and my health, happiness and longevity.

Finally I feel like I’ve settled into a “schedule” that I am very happy with.  One of the best aspects of working for yourself is the flexibility to do whatever you want whenever you want, but here’s what a typical weekday looks like for me (note - the night before I make a list of 3-5 “goals” for the day):

8 AM - Wake up, grab an energy bar and head off to the gym
8:30 - 9:30 AM - Workout
9:30 - 10:30 AM - Post-workout shake + answer email
10:30 AM - 12 PM -  Start hammering away at my goals.  Some days it’s programming, others it’s marketing.  Each day is different and exciting and this time of day is when I’m at my most productive.  I’m 100% awake and refreshed from a good nights sleep and a productive workout.
12 - 12:45 PM - eat, shower, read the paper, read ESPN.com
12:45 - 3 PM - keep working at my goals.  On the best of days I get through everything before 3 and the rest of the day is “bonus time”, but usually by this time something has gone wrong with something and I’ve gotten sidetracked (programming error, customer complaint, payroll issue…you name it, it happens - you get used to it).  I do my best to not let these things ruin my day - I take care of them and move on.  If you don’t have a short memory about that kind of stuff you’ll let it cripple your productivity.
3 - 3:30 PM - snack + read tech news via my news feeds in Google Reader
3:30 - 5 PM - back at the goals.  If I’m ahead for the day, I’ll rip through email to get a head start for the following day.  If not, I let most emails sit until the next morning (I am a firm believer that email that is not important - which is most email - can distract away your day, so I answer email at most twice per day).
*about half of the days I spend this 12-5 period with my partners, usually at a local coffee shop so we can collaborate on projects.  The rest of the days I stay home.
5 - 5:30 PM - dinner + Around the Horn.  This ritual is set in stone.
5:30 - Whenever I finish my goals (usually 7:30 to 9, but no later than 11) - this really depends on what projects I’m on.  If I’m programming I’m working until 11.  If I’m doing other stuff, I can usually wrap up by 8.  The very last thing I do is plan my goals for the next day, which I write out on an index card.
The rest of the night - 12:30 AM - eat, read, watch sports, play video games, give friends a call, see what my family is up to, etc.  One of my favorite things to do is read my business magazines - Entrepreneur, Inc., Fast Company, or Business 2.0 (which just got canned) - while watching sports.  I’m a huge sports fan, but I can’t solely focus on any game unless it’s extremely important.  So I multitask and read magazines.   I wouldn’t keep reading business magazines and write blog posts after my day was over if I wasn’t passionate about what I do.  To me, passion for something cures all other ills - you’re always motivated and you’re never burnt out because there’s nothing in the world you’d rather be doing.  You’re doing what makes you happy all day long.
12:30 AM - Sleep.  Once I decide I’m ready to go to bed, I shut the TV off and usually read a non-business book until I pass out.

There you have it.  Nothing earth shattering.  That’s my day-to-day for you.  Weekends are obviously much more lax and flexible, and if need be I’ll adjust my weekdays to accommodate other areas of my life.  The ability to do so absolutely rocks. Each of my partners has a distinctly different schedule and we’ve all adapted to what works best for us.  I’m sure we’ll continue to adapt as each of us enters different phases of our life - home ownership, marriage, kids, etc.

Oh, and I’d be remised if I  didn’t mention what I miss the least about the corporate world: commuting.  Yes, waking up at the exact same time and working the exact same time can be confining, but nothing is worse than being stifled by traffic on a daily basis to the point where it turns a 10 minute commute into a 40 minute one.  Commuting truly makes you feel like you are wasting away your life…probably because you are.  An hour a day commuting is roughly a full 24 hour day each month!

Share this post! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • Netscape
  • Reddit
  • StumbleUpon

When people ask this question, I think they are really asking three questions:

  1. Can you be happy in a career in the corporate world? Yes.
  2. Can you innovate in a career in the corporate world? Yes.
  3. Can you be an entrepreneur if you’re working for someone else? No.

I’ll explain my answers in a second. This question popped into my head while I was reading a post on Employee Evolution last night. If you don’t follow the blog, the founders (coincidentally both named Ryan) recently decided to leave their jobs and move to Wisconsin to become partners in an angel-backed company. The common reactions they are getting from people almost exactly mimic the ones I received when I left my job two years ago.

But one commenter named “dibyadeep” caught my attention and got me thinking:

Ok..maybe I am the odd one out….but I just dont understand why people are hyping about entrepreneurship so much…I feel the same thing that you are hoping to achieve by going out all alone in an entrepreneual firm can be achieved in any of the big firms too. Both however require you to think out of the box. A corporate job can be just as exciting and enticing, as an entreprenual job, without so much of personal risk at stake. A corporate firm will no doubt be full of beauracracy and red tape, which will prevent you from functioning independently, however that is specifically where thinking out of the box comes into play. You have to find out how to manipulate the elements to your favour, and not let them disable your dreams and ambitions.

Which is what led me to ask the question: can you be entreprenurial in the corporate world?

Can you be happy in a career in the corporate world?
Of course you can. Who am I or anyone else to say what does and does not make you happy. Happiness might be working on challenging projects. It might be working with people you care about. It might be getting out of work at 3 PM every day so you can pick your kid up from school and spend time with them. Defining happiness at your job is not something that can be painted with a broad stroke.

Can you innovate in a career in the corporate world?
Hell yes. Think Apple’s engineers have their fix of innovation? Back in my engineering days, we employed two engineers whose job it was to travel around the country and partner with innovative college programs that were developing technologies that could be used in our future products. They then developed prototypes of future products using these technologies and presented the prototypes to the company. I can’t imagine a more innovative career.

Can you be an entrepreneur if you’re working for someone else?
Absolutely without a doubt NO. The definition of an entrepreneur (from Dictionary.com) is:

en·tre·pre·neur - a person who organizes and manages any enterprise, esp. a business, usually with considerable initiative and risk.

Without being the one who assumes the risk of the business, you just can’t be an entrepreneur.  Entrepreneurs are exposed to the high of all highs and low of all lows.  They have no safety net, but they also have no ceiling.  You could go broke or you could change the world.  That’s why many people want to start their own business and talk about starting their own business, but never actually do.

At one point about six months after I left my job I was still living off my dwindling savings.  I remember saying to myself “If I don’t turn things around quickly I’ll be bankrupt in three months.”  Working under that kind of pressure is something most people will never experience.  Thankfully things did turn around and Pure Adapt is in great shape.  But I was willing to take the risk, and there was a chance that it wouldn’t have turned around.  That first year after I left my job gave me more strength and character than any corporate job ever could have.

Should everyone be an entrepreneur?  Hell no, we’d live in one messed up society if no one wanted to work for other people.  But unless you’ve assumed the risk of running a business you are not entrepreneurial - it just can’t be accurately simulated in a corporate environment.

Share this post! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • Netscape
  • Reddit
  • StumbleUpon

I’ve decided to hold off on promoting Music Alerts for a while for a few reasons. Primarily because I’m in the middle of ramping back up our client services after the launch of DI and I’m swamped, but also because I wanted to give it some time to be tested in the field. There’s no way to predict when an album will be added to Amazon, so I just sat back and waited.

Today I got my first real alert. It worked perfectly - Google Reader saw that the feed had been updated and notified me of the new item. I looked, saw the release of a new album (albeit an international release of an album already out), and I was like “wow, this is pretty cool”.

I also noticed that Music Alerts comes up #3 on a Google search of “music alerts”. Pretty cool to be just behind MTV and MSN after just a few weeks. I also find it satisfying that I’m now ahead of that stupid service Barnes and Noble offers where you can sign up for alerts for a whopping 30 artists.

Music Alerts Google Ranking

Anyway, I’ll hopefully get some time towards the holidays to promote it. As long as it keeps working well for me, I’m going to be supremely confident in it and be as aggressive as I can with pushing it. We’re obviously not going to spend a lot of money on a side project (i.e. none), so I think the only real chance it has is to catch the “viral” bug and get caught up on the tech sites and blogs - certainly a possibility, but obviously not an easy accomplishment. We’ll see.

Share this post! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • Netscape
  • Reddit
  • StumbleUpon

There’s no one out there that loves the recent advances on the web more than I do. From a user standpoint, “Web 2.0″ is all about innovative technologies that push the boundaries of the web without costing a cent. From Flickr to MySpace/Facebook, Google Apps, and YouTube, one common denominator is that they are all free. And that’s awesome - if you are a user. But what about if you are a development company? Those rare successes have baited us into thinking that online advertising is a really viable business option. From my experiences, it’s as much fools gold as relying on someone to buy your business out to make a profit.

Our SportsLizard Price Guide is just about to pass the 20,000 registered user mark. For those who don’t know, a free account gives users 3 price searches per day, and for $5/month you can perform unlimited searches and access a few other premium services. 3 searches per day isn’t much - more of a trial than anything you could routinely use if you’re a collector. Truth be told, we only want people using the site that are willing to pay the $5/month.

To date (since May) there have been ~200,000 price searches performed, mostly by Premium Account holders. So why wouldn’t we open the whole thing up and make it free for everyone? We might be approaching 2 million price searches right now, and with that we could sell a lot of advertising. A lot of people think that way (at times I have), but there are a few fundamental flaws with that thinking:

  1. It’s not that easy to sell the advertising. Ad networks are OK, but if you want to make more than a few dollars CPM (cost per thousand impressions) you’ll need to sell ads directly. I’ve negotiated quite a bit for SportsLizard with the “best” companies in our industry - many of which have contacted us - and it’s REALLY hard to get that from them. They want cheap ads ($1-$2 CPM) because some other stupid site owner will offer it to them. Never mind that the other site is plastered with ads and the quality of visitor is low and won’t convert to sales for them - they don’t care/aren’t smart enough to draw that conclusion. They just want to buy cheap ads. Which leaves you with two options: cover your site with a crazy amount of ads or stick with ad networks (AdSense, YPN, Value Click, Commission Junction) and earn a few bucks CPM. Think about that - for every THOUSAND impressions of your ads you’re only making $1-$3. That takes a crapload of scaling to become profitable.
  2. If you DO scale that to profitability you’ll be massive enough to start dictating higher rates from people - maybe as much as $10 CPM. But scaling to that size means you’ll need millions and millions of visitors each month. And that means you’ll need multiple servers and a larger customer service staff and more programmers…all so you can make money selling ads. That probably requires venture capital or angel investing to scale the company, and you still aren’t guaranteed anything. Getting that kind of traffic is tough.
  3. The goal of your site becomes to get people to click away to another site! To keep your advertisers happy, you’ll need to show a high CTR (click through rate) and, if they have a good analytics program, show them that those customers are profitable for them. I don’t ever want to run a site where I encourage people to leave. This is where online ads differ from newspapers and magazines. If you go to your computer and type in the URL you see in a magazine ad, you still have the physical copy in your hand. You’ll probably keep reading at some point. The content still matters. On a website that baits people into clicking, good content can be a hindrance.

Or we could just charge $5/month/user :) It doesn’t drain our single server. It doesn’t overwhelm us with customer service issues. At 1,000 paying users, which we should reach by the end of the year, we’ll be making $5k/month in recurring revenue. To make that in ad revenue - assuming you get $5 CPM…which is tough - you’d need to generate 1 MILLION ad impressions each month, not to mention handle all sorts of scaling issues.

Something to consider when you decide to start the next big thing. At Pure Adapt, we’ll certainly take our “home run swings” with cool projects that *could* make a lot of money if they blew up, but our core projects are always going to be focused around things that can generate money immediately without extreme scaling and dependence on advertising revenue.

Share this post! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • Netscape
  • Reddit
  • StumbleUpon

I received a handful of great emails/comments about Music Alerts in the last 24 hours.  I’ve also heard from a few hardcore fans who tried creating feeds of 200+ artists.  I call them hardcore because mine consisted of about 25 :).  As with any really raw program the faults were exposed for those large feeds so I spent a few hours today cleaning the programming up:

  1. Faster feed generation.  Previously, I was generating the feeds on the fly every request…meaning each time you or your feed reader requested the feed, the system called Amazon and requested data back.  Aside from being inefficient, this took A LONG time and timed out the larger feeds.  My temporary solution was to build a “caching” system that stores the feed on Music-Alerts.com and checks for updates every 3 days.  The first time you load a large feed it might take a while, but after that you should be in the clear.  I’ll look into a better permanent system down the road.
  2. Duplicate elimination.  I noticed my feed had a few duplicates in it.  I also noticed larger feeds had like 5 per album!  This was 50% my fault and 50% Amazon’s:  I had messed up on one of my loops and turns out if an artist didn’t have an album being released soon it showed the last one that did instead of skipping to the next artist.  On top of that, Amazon returns duplicates by nature as it is (do a quick search and see for yourself).  For that, I built a filter that compares album titles and weeds out any duplicates.

If you happened to build a feed prior to this post, it *should* work but your feed reader (which has the old one cached) might give you hell so it might be easier to just set up a new one.  The <description> tag in the feed has a comma-separated list of your artists so you can just copy and paste to make a new one…just remember to delete the word “and” before the last artist.

Whew.  This “weekend project” turned into a little more than that.  I’ll probably spend some time this Saturday or Sunday trying to market it a bit.  It’s definitely the type of thing that can catch on virally, so my hopes are I can get a TechCrunch or similar style tech blog to pick up on it…we’ll see.  I’ve got a few other tricks up my sleeve too…I’ll keep you posted if anything works.

Now back to “real” work.

Share this post! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • Netscape
  • Reddit
  • StumbleUpon

Last Friday afternoon I realized that I almost missed the album release of one of my favorite bands. I just happened to visit their website out of boredom and notice they had already released a few singles and were about to release a new album. I don’t have my pulse in the music industry to the point where I know every release as soon as it announced, so I usually rely on checking bands websites.

I wrote on a sticky note “find music alerts site”. I figured later that night after I finished working I’d search around and find a good music alerts site to send me email/RSS alerts whenever my favorite groups released a new album. But when the time came, I couldn’t find what I was looking for. I sent Mike a message on Skype saying that it couldn’t be possible, there had to be something out there. Aside from Barnes and Noble (which sends email alerts for about 30 artists), I found nothing viable.

I sent him another Skype message saying that would be a great idea for a site. Ten minutes later I bought Music-Alerts.com. And about 8 hours of programming later I completed Music-Alerts.com.

Music Alerts Album Release Dates

You enter a comma-separated list of your favorite artists and the site generates a RSS feed of album releases for you. Using Amazon for the data, we add an “alert” to the feed as soon as the product is entered in Amazon’s database. The feed also shows any releases in the past 180 days in case you missed anything.  Each “alert” in the feed lists the band, album title, release date, and also shows the album art (if available) and links to the CD on Amazon.

Linkin Park Album Alert

It might shock you to hear this, but I’m more proud of this project than I am of anything else I’ve ever done. It epitomizes what it means to be a web entrepreneur in my mind. I had a problem, nothing available solved the problem, so I solved it myself. I’m banking that other people have the same problem, and if they do this site could become quasi-popular. On top of that, I think I did my best design/CSS work, and it’s by far the most efficient site I’ve ever programmed (the entire site consists of about 100 lines of code).

What do you think? I’ve obviously done limited testing, so please email or comment if you find any bugs.

P.S. - In a horribly ironic twist of fate, my personal music feed works fine in browsers, validates fine, works in every feed reader I try, EXCEPT Google Reader which is of course the one I use.  Other Music-Alerts feeds work fine in Google Reader, but mine magically doesn’t show up.  Aaaaah!

P.S.S - On about my 8th try it worked.  I didn’t change anything…just re-created the feed over and over again.  Stupid Google.

Share this post! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • Netscape
  • Reddit
  • StumbleUpon

iTunes Globe

A few posts ago I mentioned our PDF invoice system for Detailed Image, one of the main benefits of which is that it brings us a step closer to being a paperless company. Every PDF I’ve opened since we began working on that has reminded me that I’m saving paper by reading it on my screen.This afternoon I had the same thought while “flipping” through a digital booklet that came with an album I recently purchased on iTunes. At first I thought “isn’t it nice that I’m saving a little paper by viewing this on my computer”. Then I thought “I buy like 5 albums a month…I’m saving quite a bit of paper”. Which of course led me to think “oh crap, how much waste is being saved each time a CD is downloaded instead of purchased?”

Let’s break this down. Each time you download a CD on iTunes (and back it up electronically as opposed to printing the album cover and burning the CD) you save:

  • Paper and ink from the album cover and backing.
  • Plastic for the album case.
  • A CD and the ink used to print on the face.
  • Shrink wrap to seal the album.
  • Gas and other costs associated in transporting the CD…more than once (from manufacturer to distributor to consumer).
  • Electricity and other resources consumed in manufacturing and assembly.

Like most people, I love iTunes for the convenience. Turns out it might be having a larger impact than we realize.

Share this post! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • Netscape
  • Reddit
  • StumbleUpon

Lately I’ve been reading quite a bit about our generations’ “undeserved sense of entitlement.” Quite frankly it pisses me off and I want to set the record straight. First was an article in Inc Magazine where a manager asked how to manage “young workers who have an inflated sense of entitlement”, followed by a story on Employee Evolution about managers who want employees to conform to their standards of security (wife, house, kids, etc) to trap them into “needing” their job. Both show a blatant misunderstanding of our generation.

More so than the average post, this one is solely based upon how I’ve seen the world through my eyes. For a 25 year old, I have considerable professional experience, particularly in the role of the “young professional” from my two internships and one co-op in college, and my one year in the working world as an engineer. That said, I’m pretty sure what I’m about to say applies to every industry, not just web development and engineering. I’m convinced that people are looking at this 180 degrees the wrong way. From my experiences, it is the older generation of management that has an undeserved sense of entitlement.

Experience in life and in business is invaluable. But so is a complete understanding of the latest technology. I’m sorry to point out the obvious, but our generation runs circles around previous ones and makes up for the lack of experience tenfold. An engineering student from a top school knows the ins and outs of every latest and greatest piece of software available. All of the places I worked it was OUR generation that was teaching the older generation more efficient uses of THEIR technology. I’m sure the same applies to just about any industry - everything can be improved with technology in one form or another, and that’s where we have the upper hand.

Subsequently, our most skilled ProENGINEER (3D Modeling software) and Minitab (statistical modeling software) professionals were the students who just arrived fresh from college. The students just spent years learning from some of the best professors in the world, pushing each other to learn the limits of the software for challenging exams. When they arrived at our company, they suddenly realized that they were leaps and bounds ahead of the veteran engineers. Therefore they were able to produce far more structurally sound designs in far less time.

Here’s what it boils down to for me - I don’t give a flying f*ck about your previous experience if it isn’t relevant to the current and future business economy. The majority of business knowledge from the 70’s, 80’s, and even 90’s is largely useless in today’s economy and the economy of tomorrow. Therefore, the majority of your prior experiences are largely inapplicable to today’s business world. And if that’s the case, you have to ask yourself - who has the skillset to compete in the future economy? Who has the ability to quickly learn and process massive amounts of information, and make quick decisions using the best tools available? Who is the most comfortable with change? The answers to all of those questions are, in my opinion, my generation…and it’s not even close.

Maybe those who manage recent college grads should worry less about molding us into the next “them”, and focus more on harnessing the skills of their young talent to help grow their company for the future.

Share this post! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • Netscape
  • Reddit
  • StumbleUpon

Since we launched the new Detailed Image site last week we’ve had a lot of “the site looks cool” compliments. While we certainly appreciate the positive feedback, 99.99% of visitors will never ever recognize the changes we made to help improve Pure Adapt as a business. This post is dedicated to those features, why we put them in place, and the lessons learned in building a custom shopping cart from scratch. The goal was to have at least the functionality of the old cart for about half the site (which was an osCommerce cart) while implementing a laundry list of improvements for the rest of it. I think this post will be particularly useful to programmers who are planning to program their own e-commerce platform - many of the problems I encountered I struggled to solve because there were very few resources available.

Let’s start with some of the features:

Rewritten URLs
One of the primary reasons that we decided to pull the trigger and begin developing the site was that DI received virtually no search engine traffic. The osCommerce site consisted of literally two files /store/index.php and /store/product_info.php and all pages were dynamically generated based upon a series of URL variables like ?category=12&cpath=4&productid=99. Search engines are getting better at indexing dynamic sites, but DI was clearly having problems (they have several thousand links and still were barely being crawled).

The solution to this problem for dynamically driven sites is URL rewriting, which is basically changing the URLs to become unique for each page and product without using any URL variables. For example, http://www.detailedimage.com/Poorboys-World-M1/Spray-Wipe-SW-P32/. These URLs are “hackable” (you could visit http://www.detailedimage.com/Poorboys-World-M1 and it would work fine), and also provide the added bonus of being more “clickable” when someone searches. Example - if you searched “Poorboys World Spray and Wipe” wouldn’t you be more likely to click if Google displayed that URL as opposed to http://www.detailedimage.com/store/index.php?productid=89 ?

If your site is on an Apache server, you can accomplish this relatively easily in your .htaccess file. The biggest thing to remember is that you need to 301 redirect all of your old pages to the new ones so that search engines (and people) looking for the old page will be redirected to the new one.

Product Upsells
We built a product upsell system that recommends “Complimentary Items” and “Works Best With” items uniquely for each individual product. The relationships were hand coded by George based upon his years of experience, so they are highly relevant. Users can purchase the item by itself, or as part of their own custom bundle based upon the upsells they select. We anticipate that these will raise the average sale price quite a bit.

Detailed Image Product Upsells

Google Analytics E-Commerce Integration
I think that by now most people know that Google Analytics is the preeminent web analytics tracking software available. Aside from being the right price (free) and easy to install, the automatic integration with Google AdWords and configurable tracking ‘goals’ make it a hands down choice. But one of the features that most people don’t know about is the e-commerce revenue tracking that they have built in.

This is one of the most useful features I’ve ever seen in analytics software. We pass the product information for each transaction to Google on the receipt page via a simple javascript, and in turn it tracks EVERYTHING related to the transaction. We now can determine how much revenue is derived from organic search vs. PPC vs. forums we sponsor - it brings web analytics full circle. We can even see revenue and products sold for each individual forum - so now we can precisely evaluate the ROI on a $300/month forum, for example. We can also see which type of visitor spends the most on average per transaction…or which type of visitor purchases which products. Data can also be segmented by location (country, state, etc), browser, and just about any other way you’d want to splice and dice it. Oh, and you can even use it to track affiliate sales if you have an affiliate program (we’re planning one on in the next few months). You can’t put a price on the value of this information to a small company like us. We can make much more informed decisions now.

Backend Automation
For the past two years, George and Greg have spent several hours each day manually processing each order: they charge out the customer, enter his/her billing info into Quickbooks, request a FedEx quote, print out invoices and shipping label, pack and ship….for each and every customer. Now we’ve got all of that down to a process that takes less than 3 minutes (not including packing time of course). In addition to saving them 3-6 hours each day, it eliminates the mistakes that they made manually entering customer info over and over into Quickbooks.

In addition, we also have full tracking capabilities for FedEx packages through our site for both us and the consumer, further eliminating customer service inquiries related to tracking.

CSS Overlay for Pictures
The art for the site was primarily done by artist Sam Li, who does absolutely spectacular work. His talent allowed us to bring the “driver cockpit” idea for the site to a reality. The coolest innovation was the navigation screen on the right that displays category information, specials advertisements, and product photos.

One thing I always HATE on other sites is a pop-up window when enlarging an image to view a close-up of the product. Problem solved with a slick CSS overlay for product photos.

Detailed Image Product Overlay

Auto-generated Sitemaps and Froogle Feed
The Sitemap, Google Sitemap, and Froogle feed (Google Product Search now) are all completely automated. If we add a new product, they are all updated appropriately. Previously, George was manually compiling them.

Of course, the best benefit of all is that this new system is completely scalable without limitations. We created it, so we can expand it however we want, something that wasn’t really possible with osC.

NOW, on to some of the problems I encountered and how I overcame them. This section will probably only be of value to programmers, particularly those looking to build an e-commerce site themselves.

The #1 thing I learned from a programming perspective is that most companies use an off the shelf cart (Yahoo Stores, osCommerce, CubeCart, etc), so don’t expect there to be a ton of information out there if you’re looking to build an extremely customized cart. The majority of problems I solved on my own.

FedEx/USPS Integration
This was by far the most difficult. Surprisingly, neither company makes it very easy to integrate with their site. We began the project with the idea of generating shipping labels ourselves for 100% integration…which we quickly dismissed because of the lengthy approval process that both have. We only ship USPS for International orders (relatively uncommon), so George and Greg decided to continue to do those labels online themselves.

So I needed to be able to generate rate quotes for FedEx and USPS, and be able to ship FedEx with our system. In addition, I needed tracking integration for ourselves and our customers. Here’s the solution I came up with:

  • Generate FedEx rate quotes using Vermonster’s Open Source FedEx Direct Connect. Support is nil (I tried emailing them for help once), but if you take the time to read the documentation and comments in the code it shouldn’t take too long to get up and running. Of course, you’ll need to register with FedEx to get testing (and later, production) keys.
  • Generate USPS rate quotes using Aldirgas Varnagiris’ USPS PHP rates calculator. It worked perfectly right away, however you can only run the specific examples (as opposed to using your own address) with your test account. You also can’t run any international examples using the test account (took me a day to figure that out). My advice - try the domestic example, if it works, apply for the production key and test international using that.
  • Use the FedEx Ship Manager to print invoices and generate tracking numbers. The software sucks ass, but using it means you’ll generate 100% perfect shipping labels…much easier than trying to make them yourself and then go through FedEx’s verification procedure. Our backend generates a text file for the days orders, which you import into the the Ship Manager (using what they call the “Hold file”). You click to ship, the labels print, and you export a text file back to the website to insert the tracking numbers. Sounds relatively simple, but “Hold file” documentation is scarce, so I relied on some of the FedEx DC documentation from above and also the really-hard-to-find Tagged Transaction Guide to get the file formatted properly.

If you’re trying to replicate those steps, I’ll be happy to answer any questions that might arise throughout the process.

Redirects and URL Rewriting
When moving a site or changing URLs it is critical to implement 301 search engine friendly redirects to tell both people and search robots where your new files are.

I’ve always written a 301 redirect in the .htaccess file like the following:

Redirect 301 /feedback.php http://www.sportslizard.com/contact.php

And I never had a problem. Turns out in this case, there were some higher level server issues messing with our redirects. In addition, we had dynamic URLs for our old site, which can cause problems if redirecting that way. After many, many, many hours searching around and using trial and error, I came up with the following solution for redirecting a dynamic URL to a static one using the aforementioned URL rewriting:

RewriteCond %{QUERY_STRING} ^cPath=21_113&products_id=266$
RewriteRule ^store/product_info.php$ /Menzerna-M10/Auto-Shampoo-P71/? [R=301,L]

In this example, we’re redirecting http://www.detailedimage.com/store/product_info.php?cPath=21_113&products_id=266 to http://www.detailedimage.com/Menzerna-M10/Auto-Shampoo-P71/. The QUERY_STRING is the URL variables (anything after the .php in the URL). The SUPER IMPORTANT thing to remember is that last question mark - that prevents the query string from being appended to the new URL. You’ll see that the R=301 tells the user agent that this is a 301 redirect as opposed to a normal URL rewrite.

PHP Dynamic PDF Generation
I decided to take a fresh approach to invoices and receipts. Instead of the standard “view printable invoice” we provide each customer with a link to a printable/downloadable PDF receipt. In addition to always printing correctly, it gives them the option of just downloading it to their hard drive (saving the paper). I got the idea from Mike (our fourth partner) when he told me he used PrimoPDF to PDF any receipt from an online purchase.

We’re also using dynamic PDF generation to store digital copies of all of our invoices.

After trying a whole bunch of different options, I finally settled on using FPDF - a simple open source PDF-ing software for PHP. While it’s really easy to generate a simple PDF with different text sizes, colors, and pictures, I had a ton of trouble printing the tabular data necessary for an invoice. FPDF works much like a dot-matrix printer: it prints line by line and you control the location on the line based on left/right padding. This caused problems when trying to line up an invoice. Eventually I found the Write HTML Tables add-on scrip that allowed me to format the invoice like an HTML table which worked perfectly.

CONCLUSION
Hopefully this will be a valuable resource to anyone developing an e-commerce platform, or anyone who currently has one and is looking to make a few upgrades. As I mentioned last post, this was one long and exhausting project, but it was worth every second: 3 months of work for years and years of cost savings and improved efficiencies. Over time I’m planning on posting examples of how these features help take the company to the next level.

Share this post! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • Netscape
  • Reddit
  • StumbleUpon

Last night, after debugging from 9 AM to 9 PM we went to launch the new Detailed Image site, which has been a work in progress for all four of us the past 3 months or so. The first thing we did after uploading everything was test the redirects - which of course didn’t work.

I’m no rookie when it comes to migrating sites and redirecting old pages to new ones - hell, I did it a week ago flawlessly with this blog! After exhausting our options until 2 AM and getting nowhere, we started again this morning and finally found and successfully implemented a solution at about 3 PM today. Turns out the guy who runs our server (and does a great job by the way) had configured *something* in Apache that was messing with our .htaccess 301 redirects. We found a work around, which I will post on this blog in the near future because I wasn’t able to find anyone at all with the same issue after doing a bunch of Google searches.

Anyway, here’s the new homepage:

Detailed Image Home Page

I’m planning on doing an exhaustive series of posts related to the programming issues I encountered with this site.  I came to one conclusion - with all of the e-commerce platforms out there, very few people attempt a 100% custom cart like we did.  I was shocked at how hard it was for me to tackle 4 or 5 different issues, primarily because I wasn’t able to find any help from Google and the blog/forum community.  So I figure I’ll post all of that up so next time someone runs into the same situation they’ll have something to reference.

All of that said, I am 100% completely drained - I’ve got nothing in the tank right now.  For the past 3 months, I’ve pushed balls out everyday to launch this site so that our company can make the efficiency gains from the automation of this site, which in turn enables us to focus more efforts on marketing existing sites and developing new ones (the key right now to our successful growth).  Every bit of expendable energy has been directed to the site the past 3 months.  Couple that with the PayPal disaster last week and this redirect fiasco last night, and those two “crisis” have worn me down.

Honestly, if I had a wife and a house and 2.5 kids I wouldn’t be able to do it right now.  Even after a few years, I still need to give the business priority.  We all acknowledge that this is the turning point for the company and it’s uphill from here, but the focus, determination, and sacrifice that all of us have given lately is evidence of just how hard you have to work to get to the spot that it looks like we’re at now.  We’re all talented guys, but nothing replaces relentless hard work.

So I don’t burn out, I’m taking the next few days real easy (i.e. unless there’s ANOTHER disaster, I’m not working).  Come Monday we should all be back to a little more “normal” working schedule and I should be able to spend some more time recharging away from the job…certainly no more 9 AM - 2 AM days like yesterday.

I’m off to eat and nap - two things I’m very much looking forward to doing!

Share this post! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • Netscape
  • Reddit
  • StumbleUpon

Next Page »