During this series on creating a profitable business around the concept of building Drupal sites for $100 I have attempted to demonstrate that there is a viable business model here. I don't believe it is a business that will suit everyone and nor do I believe every developer will want to work on such a project, but for some this will be an excellent opportunity. Today I will cover some of the things that I think you should consider before investing too much in this business model. Some of this is just basic business sense which isn't specific to this project.
Dollars and Sense
Oscar Wilde once wrote "
What is a cynic? A man who knows the price of everything and the value of nothing". If you want to build this type of business, be frugal, but not a Scrooge. Generally a good developer will cost you more in salary than an average one, but the good developer will work out cheaper in the longer term. A similar thing goes for hosting, avoid Virtuozzo based VPS and look for someone offering the more expensive Xen or KVM based platforms, they are less likely to oversell capacity. At the same time keep an eye on the markets you are buying services in to ensure you are always getting the best value for money.
Recognise when you have to pay for something. Spending a little now might save you a lot in the long run.
In House vs Outsourcing
It makes sense to outsource some services, for example email. You want to focus on offering a high quality Drupal driven SaaS, having to support email too is a lot of hassle, use Google Apps for Domains or similar service.
Some things are better performed in house, such as design and themeing. There are businesses around who offer cheap PSD to Drupal theme conversion services, but these services usually cut corners which will cost you more in the longer term. Having someone in house means that they can learn from others on your team and do things the right way for your business.
Although the theme of this series is "$100 Drupal site", that doesn't mean every site you sell should be $100. You need to research your target market/s and make sure you are pricing your product/s appropriately. I would seriously consider offering 3 levels of service, each level should offer more options, bandwidth and storage. Some customers will be drawn by the initial $100 price tag, but when they see the feature list, the $250 product might be more appealing. Give customers a sense of choice.
Options and Up Selling
Find opportunities to sell extras to your clients. Not everything needs to be included in the base level package. I discussed enhanced support offering in my previous post, which could provide additional revenue.
Most of the clients who sign up for this service will have no interest in paying for a custom theme and/or development, but once you have them through the door you have more chance of selling such extras to them. Find the higher traffic clients and connect with them, see if they want more. The price jump is likely to be significant, but if they can see value in it, they may pay for it.
Domain names is a great opportunity to generate extra revenue. By default customers should get biz-name.example.net, and charge them a fee if they want to use another domain, such as mybiz.com. Most people know that GoDaddy sells domains for around 10USD, while Melbourne IT charge around 75USD. Sign up for a reseller account with one of various domain registrars and offer customers domains directly from your service. If a customer brings their own domain charge them a fee, if they buy the domain through you advertise that you waive the setup fee, but then include it in the pricing of the domain name.
Seek out partners. If you can find a company which offers a service which is a good fit with your business, work out a deal with them. Be it bulk licensing, reseller, commissions, find something that works for both parties. Your customers can benefit from such arrangements too.
Previously I mentioned that you will be benefiting from the great work of the Drupal community, you should acknowledge this benefit by contributing back to the community where it is appropriate. Not only does this help build the profile of your business in the community, it can reduce your maintenance workload. For example if you have a patch which fixes a bug or adds generically useful functionality to a module, push it back up stream, so you don't have to maintain the patch. Consider having a budget for sponsoring community events to help build good will.
Allow customers to export their site and go host it with someone else. This might sound counter intuitive, but if they are just a base package customer and you are hosting them, they have paid you. If they are only 2 months into 12 month service, which should be non refundable, then let them take their site, that frees up server resources. It is also the ethical thing to do, don't make your money because people are locked into your service, they will eventually resent you for it.
Drupal itself is licensed under the terms of the GPLv2 (or later) with some contrib modules depending on GPL compatible code. If you are contributing code back to drupal.org it must be under the terms of the GPLv2. You could choose to offer the non PHP parts of your code under CC-BY with an attribution in the footer, you could release your features under the terms of the AGPLv3. These are business decisions you must make in the context of the rest of your business.
Pay for Expert Advice
There are times when you need an expert. Get a lawyer to check your Terms of Service and any significant contracts. Use an accountant to get your financial affairs right from the start. If your servers are performing poorly and your Sys Admin can't work it out, pay for someone who can. Sometimes it is better to pay for something than trying to learn how to do it yourself.
Blog about your experiences, share the knowledge. I'm not advocating putting your entire business plan online, but discuss problems you've solved, code you've created so others can benefit from your experiences. Don't be afraid to share, Scott Adams sums this up perfectly "
Ideas are worthless. Execution is everything". I have nothing to fear in publishing this blog series, after all it is just my ideas.
This is the last substantial post in this series. I have tried to break it up into digestible chunks. Thanks for taking the time to read my posts and I welcome any comments you may have.
I plan to let things sit for a few days. Over the weekend I plan to review the comments posted and emails received as part of preparing a summary response and conclusion. Anything else I think of will get tacked onto that post.
In my previous post in this series on the $100 Drupal site I outlined a possible target market and set out why I thought very low cost sites could be a viable business model. Today I will cover the resources and infrastructure you'd need to consider to build such a service.
I am not proposing that the business is built on the premise of working for $5 per hour to build new sites for each client. The whole business should be automated. There should be no need for human interaction to close the sale and deploy the site. As soon as a worker is added to the process costs start to rise. At the same time we need some skilled professionals to build the platform and the cookie cutters.
Building a very basic Drupal site doesn't involve that much skill, it is possible for someone to signup with a web host that uses an automated installer script, such as Fantastico, and then start building a site using stock Drupal core. Building great Drupal sites takes skills and knowledge. In order to build modular Drupal sites that can be used as part of installation profiles and deployed using automated processes, you will need someone who knows Drupal pretty well. The person driving development of the project should be passionate about Drupal as a platform. They are likely to have an opinion on the Drupal specific religious wars - Panels vs Context, CKEditor vs tinyMCE, which Slideshow / Carousel module to use etc.
Most competent PHP developers can be taught how to develop for Drupal. A second, junior, developer can be used to do a lot of the build work. They can start being a "click monkey" developer and as their skills grow they can get their hands dirty writing glue modules and patches. This person should be good at driving the Drupal GUI and working with contrib.
Designer / Themer
Although customers will only be paying $100 for their site, they won't be very impressed if they can only use Garland as their theme. They will expect a choice of themes. The themes should be designed from the ground up to be flexible Drupal themes. The designer should have experience creating designs that will be come Drupal themes. They should understand flexible regions, module themeing and how the Color module can be used to provide control to the user over their theme. Ideally the designer should be able to craft HTML and CSS, and even perform basic Drupal themeing.
Even though the plan is to keep costs low, it doesn't make sense to run the $100 sites on cheap shared hosting. You need to spend money on your own solid hosting infrastructure, and if you have your own hosting infrastructure you'll need someone to manage it. The sys admin will be responsible for keeping everything running, adding new servers, testing backups etc.
You will need a system administrator who has some experience with administering LAMP servers, previous Drupal experience is a big plus. You want someone in this role who hates downtime.
One of the assumptions for this project is that 95% of the sites will have less than 50 page views per day. At first there will be very little traffic for the sites, so you can start off pretty small, but as the business grows you need to have a plan in place to handle that growth.
I wouldn't recommend spending a lot of money on buying servers outright and putting them in a data centre. Start off with some virtual machines from a cloud hosting provider, such as slicehost, linode, rackspace cloud or amazon AWS (if you don't care about liberty). By using cloud hosting providers you can scale your infrastructure up as you need.
To get started you will probably need 3 production virtual machines, one for serving up content, one for the db and one for search using Apache Solr. Each of the VMs should have 1G of RAM and be located in the same data centre with the same hosting company. When things start to grow you can scale up the VMs as you need and even add more servers. Each time you scale things you will also have to retune your configuration. An opcode cache such as APC or xcache will allow you to serve more requests on the same hardware. You should include some kind of monitoring service such as nagios or zabbix to make sure things are running as you want.
Once you have more than a handful of machines to manage, you will want a centralised configuration management tool. This will allow you to add new servers and have them configured as you want them with no (or very little) human intervention. I would recommend puppet for this job. Given the effort involved in retro fitting puppet in an existing environment, it will be easier to add it from the start. You may want to consider using libcloud to even handle the deployment of the VMs too.
To ensure everything can be tested properly before deployment, you should seriously consider having a replicated testing environment. Instead of having 3 more VMs, you can just run up a Linux box with 4G RAM and a relatively modern CPU and run 3 VMs on it using KVM or Xen.
Now we have the business plan, the market, the team and servers in place, it is time to start looking at some of the tools we'll be using to make all of this possible. The next post in this $100 Drupal site series will cover the tools needed to build a sustainable platform for the business.
Our site hasn't changed very much over the last 4 years, but the business has changed a lot. The biggest change was the (uneventful and long overdue) upgrade to Drupal 6 a few months ago.
During the last week or so the site has been updated and refocused. The major changes include:
- The home page focuses on our main services
- The services section has been updated to reflect the services we currently offer
- Added a projects section to showcase the contributions we have made to various projects over the last decade
- The footer has been rethought and now provides links to key parts of the site and relevant off site links
- Implemented the custom breadcrumbs modules to improve navigation within the site
- Updated service links module to provide a more diverse selection of social networking links, including identi.ca with a patch
- Offloaded some RSS feeds onto feedburner, through the drupal contrib module
This also signals our return to regular blogging. There are a few posts in the pipeline. There should be a good mix of drupal and sys admin posts in the coming weeks.
As always, feedback is welcome.
Back in the late 90s there was a range of free website hosting options - geocities, angelfire and tripod are the big 3 I remember straight off the top of my head. The business model was pretty simple, you got a free site, albeit with a pretty crappy url, and the host got to inject ads into the page. The first "site" ever I ever built was hosted by tripod and is still up, I have forgotten the login details so it hasn't been updated for 11 years.
Of the 3 stars of this business model, angelfire and tripod are still offering an ad supported version along with ad free, fee for service upgrades, but geocities is dead. Today, the business model has evolved, you can get a free but ad supported blogs (see Blogger.com or wordpress.com), email services (see gMail, Yahoo or Microsoft) or project hosting (see sourceforge, xp-dev or CodePlex) along with many other online services. For personal stuff I think this is fine, and the same goes for small not for profit organisations. On the other hand if you run a business and want to appear professional, profitable and "up with technology", then you don't want your email address to be email@example.com, or your website to be acme-inc.freehostingco.com. It could be worse, you could be using an email address or hosting supplied by your ISP such as firstname.lastname@example.org and myisp.com.au/acme-inc. In the case of email, you can use google apps for domains and still look professional.
It is different if you are solely providing free (as in beer) content, such as video, news or a professional blog. This is a clear business model, fund free content via advertising, it has been used by print news, radio and television for decades. I also think it is fine for community based free/open source software projects to use it to get some additional revenue. It is different if you are a profit making business.
Not only does running ads on your site look unprofessional, you could be promoting the competition. Google targets their ads based on the content of the page. For example if you are a small shop and you have a page listing the types of products you offer, Google is likely to serve up ads on that page for those products. Do you really want an ad from a competitor showing up with "Cheap [item], free next day delivery"? How many high volume paying customers will you lose for that extra few dollars a month in Ad Sense revenue?
I find it more shocking on large corporate sites. Yes, they attract a lot of eye balls, but I pay my phone company enough money and they make large enough profits, that I shouldn't have to be subjected to ads on their corporate home page. It makes them look cheap. The same goes for smaller businesses.
In the case of a business blog, it should be part of your business website. If people find your blog and they like what they see, they are likely to click around your site to find out more about you. If you have your blog on blogger they are only likely to find other blog posts, and if you have a link to your business website, they will probably stop clicking once they hit your business site as it is completely different from your blog. If on the other hand it's all nicely integrated, your readers are able to move from your blog posts to your business content seamlessly - and so are more likely to become a customer, rather than another bounced visitor.
What are your options? Many hosts offer one click installers for setting up drupal, wordpress or other content management systems. With a bit of help from an online tutorial or 2 you should be able to get drupal up and running with a basic site and a theme from contrib. Sure it will look a bit cheap, but no worse than something on blogger. If you were to host it with dreamhost it is going to cost you around 120USD/130AUD for one year. Even if you have to pay someone to help you setup your CMS site, it will probably cost you less than 500USD in the first year for a basic setup. A basic setup will allow your business to project a professional image to the world. Add a professionally designed custom theme and site build for another 1850USD/2000AUD or so and you are set for a few years. Of course you will spend more if you want some to help with designing your information architecture, help with SEO, produce or proof content or suggest images etc. The investment is likely to pay for itself over that time in increased sales.
Financially the last 12 months has been pretty good for DHC. What financial crisis? This has come at quite a cost.
Once again I have ended up having an extended period of time away from home for business. Today is day 37, country number 5. I am sitting in a hotel room on the evening of my only day off this week wondering why am I doing this. I have a family, friends, clients and a life back in Australia.
Others have blogged about hitting the travel wall - for me it kicks in after about 2 weeks and I keep fighting it until I get home. This year I have been away for 103 of 311 days - that doesn't include the days spent in Melbourne or visiting family. I really understand what Dries meant in a recent tweet.
I am starting to realise humans aren't designed to work like this.
Sure there is a lot of stuff that can be done via email, irc, chat or on the phone. All of the technology in the world can't replace face to face meetings. Just as technology can't provide the opportunity to exchange a funny story or joke in the corridor, it certainly can't make up for just wanting to be at home.
I know a few developers like myself who have ideas kicking around in the back of their mind most of the time, then it clicks - bang solution! This background noise is a blessing and curse. It never goes down too well when I am suppose to be spending time with the family, but while pushing one of the kids on the swing the answer to a problem from yesterday comes to me, ring the client to discuss the solution and make sure they are happy with it - damn junior has fallen over while I was distracted.
The background noise also has another significant downside, it is very hard to shut off. I find alcohol works pretty well at giving me some "mental space", while also being legal and readily available. The downside is the harder I work the more I need that mental space and so drink more. Earlier today, I found a site which claims to guestimate how much alcohol you would have to consume in 3 hours before you were dead, I tweeted my results, I thought it was amusing. The other thing I came across was a blog post from Stephan Hermann (aka @ubuntuworker on identi.ca) on his fight with alcohol. Stephan's post was a timely reminder of how things can slide.
Most of us in IT want to see the system delivered, the product shipped, the customer happy, and most of us will put 120% into making that happen. When it is all done, we go for a beer or 10. Just about every IT shop I have worked for had beers on a Friday night, after a project was delivered or sometimes just when we came up with a lame excuse.
I don't think many people outside of the IT industry understand how stressful it can be and drinking, or other substance (ab)use, is considered an acceptable way of dealing with that stress.
Earlier this year I was in Beijing and some client data was lost due to a mix up (mostly caused by me not being able to read Chinese and someone else's lack of English). I felt awful. Around the same time a guy working for Foxconn a new iPhone prototype threw himself out of the office after being accused of stealing one of the units. This was an extreme case but I so felt for the guy, he was just doing his job, something stuffs up and he feels powerless.
There are many more stories I could link to and discuss, but I won't.
In Australia and other places there is a lot of talk about making work environments more family friendly. Sadly I don't see that happening in our industry. I see the opposite. The global financial crisis is used by some to make their staff work harder and longer for less money. As a contractor I get to set a price and run the meter, but I find myself saying yes to projects or demands that I should not be accepting.
When I return to Australia I plan to give my liver a break, spend more time with my family and develop strategies for "switching off" more often. Life is too short to be a slave to work. I can't continue to work like this claiming I am building a future for my children when I am undermining my own future, and so theirs. Time to deal with my issues, make a plan and be successful, like another Dave.
Sorry for the rant but I felt that this all needed to be said.
I am writing this post with a strong sense of sadness. At the same time I feel that I have no other option. I am walking away from phpGroupWare.
Before I walk out the door, lets go for a trip down memory lane. Insert tacky music wavy lines down the screen and bad hair styles from here on in.
I think the first time I heard Linux mentioned was in 1996/97. In 1999 I had my first experience with Linux, through an anarchist friend, I was very curious, but didn't have much of an opportunity to play with it.
In 2000, over a few months I started to play with Linux and GNOME dual booting my machine. I could never really make it do what I wanted, but I persisted. The first version of Linux I bought was Macmillan Linux 6.5 - I still have it in a cupboard somewhere. I then moved on to Red Hat 6.2.
In 2001 Julie's work was sick of waiting for their shared calendar solution. I was contracted to install it. They had an NT4 box running Lotus Notes, which no one wanted to touch - including me. I found phpGW by searching (probably "yahooing") for "open source groupwise". I would later discover I had embarked on an epic journey. I knew of open source, but I didn't know a lot about it. PHP seemed pretty cool, as did phpGroupWare. I recommned they get a new server - a good one, dual PIII-800s, RAID-1 and Linux, it cost over $3000. I learnt a lot on that box including basic Linux sysadmin, compiling stuff from source and what happens when you forget to update lilo. Today that server lies idle in a cupboard in my office.
Very quickly I became involved in the phpGroupWare commununity. By 2002 I considered myself active and later that year I was promoted to release manager. By 2003 I had landed my first overseas gig indirectly through phpGroupware. By now I felt very strongly that I was a free software developer. 2004 saw the EGroupware.Org fork, or as I still like to refer to it, the EGO fork. This did considerable damage to the project and sucked a lot of life out of it.
Since then the project has done some cool things, but struggled to get a release of trunk for over 5 years. There are some really smart people around the project, but none of us seem focused to shipping a product, and I think we all have different ideas of what that product should be. I have met many awesome people over the years, include the Paris conference in 2006.
It is now late 2009, I have 2 kids and a growing business. PHP 5.3 is out and we are still trying to port to PHP5. There are many solid application frameworks around - my personal favourites are Zend and Drupal. Both of these projects have large developer bases, active communities, clear development processes and documentation, phpGroupWare fails on each count.
The project has exposed me to so many great people and ideas. These things will stay with me for the rest of my life.
If anyone is to take over phpGroupWare, my first suggestion would be to start over. Clearly define a purpose for the project, define a target market, build a product which fits that purpose and appeals to that market. Such an approach will involve a significant investment of resrources. I just can't commit any resources to the project at this time. If things change I may come back one day, but now things feel too far gone.
As much as I hate to say this, I think phpGroupWare is a dead project. I feel that it is time for me to move on. I will make myself available to assist with any handover or shut down of the project.
Thanks to everyone who has contributed to making phpGroupWare such a great project over the years. It was fun while it lasted.
After a visit to the accountant today, I decided to switch from a sole trader to a company structure. There are many benefits to my business structuring things this way. For my clients it will be business as usual, just a change to the letterhead and bank account details. For me, it involve more bookkeeping, which may not necessarily be a bad thing
Getting the company up and running took 10 minutes on website, and a small payment to the business which set it up for me - too easy. Getting a new ABN and other stuff done with the tax office was a waste of an hour, if I had more time I would blog about it. At the end of the process a got a "your session has expired" message. Hopefully a real person at the ATO will be more useful tomorrow.
Now I have a few things to arrange/update over the next few days. Hopefully I can get it all sorted before I head off to Europe.