Email servers.. the bane of every sysadmins existence. The second something goes wrong with an email server, you’re guaranteed to get 100 phone calls and people dropping by your office to say “My emails aren’t working”. This is one part of your hosting infrastructure you want to get right.
I’ve decided to build my infrastructure on Postfix & Dovecot with a MySQL user database. My previous email setup was built using this howto. One of the major issues I ran into was with Courier’s inability to handle large mailboxes so I’ve decided to use a similar setup only with Dovecot in place of Courier and there are a couple of other major differences:
This is going to be a highly distributed configuration (ie multiple servers in multiple datacentres)
This is going to sit behind load balancers (brings interesting spam filtering and security issues)
This is going to use a clustered MySQL backend
So the goal of todays blog post is to deliver:
Multi-server & multi-datacentre replicated mail stores
Fault tolerance (pull a server out at any time of the day and mail keeps flowing)
Perfection is the enemy of progress for all product development people and sadly its an enemy that many are losing their battle with. If you are a coder, hardware nerd, product developer, entrepreneur, anyone who creates products you really need to read this blog post by Andrew Chen and take it to heart.
It seems like the last year or so has increasingly thrown me into the path of people who have been afflicted by the self delusion, doubt and stalled products that Andrew’s article so eloquently discusses. This issue has become quite personal to me because I am watching so many smart people miss out on awesome opportunities with no good reason.
The first thing you need to take away from that article is that you and your customers see your products from totally different perspectives. What you see as a feature, they see as a bug and what you see as imperfection, they often don’t notice at all.
No product is a wild success on its first release. Product development requires trial, error, measurement and most importantly validation that the product is answering the needs of a large enough customer base for it to become commercially successful.
To do this you need customers! Real people who need and want your product. People who are going to give you real honest feedback in the most honest possible way – with their wallets. If you believe that you are good enough to release a holy grail product without the failure and feedback that comes from having real customers using/breaking/loving/hating your product you’re crazy.
With the people I’ve met and spoken to so far, this behaviour comes from some or all of the following:
Fear of criticism
Lack of confidence
Lack of perspective
Imagine if you ran your product development process in a way that makes you the subject matter expert on your product. You’ve spent time with and developed a group of people from your clearly defined target market (You do have one don’t you?). They have told you what ails them and what they would pay for a solution to that problem. You have bounced ideas off them and come up with a minimally featured non working pre-alpha product. They have provided you with feedback which helped you to modify your plans and release a working alpha product which they are even prepared to pay you for! Success is surely not far off.
In this imaginary world the fears, lack of perspective and inflexible assumptions of the people I’ve been meeting don’t materialise. This is because you’ve stopped and taken the time to ensure that you’re building the right product. You have confirmed that the problem you’re solving actually exists. You’re no longer spending your life justifying your own opinions because you know what you’re talking about and have evidence to back it.
The only thing that involving your customers doesn’t fix (at least initially) is lack of confidence. Getting out of the office and talking with customers is a critical process. Every single person who creates things must do it regularly in order to remain relevant in their role. Once you’ve done it a few times it becomes easy, you will find that the people you’re talking to become excited to talk with you because you’re helping to make their lives easier.
People with stuck or failing products more often than not have an ad-hoc and unplanned product development process and they are almost always so consumed with “doing stuff” that they miss the point of why they are building the product in the first place – to serve their customers needs. This never ends well.
If you have a product thats stalled, stop working on it now! Get out of your mums basement! Go and visit your customers! This does not mean jump on IRC and ask your mates what they think, or to email a couple of customers asking their opinion. It means physically going out to have a cup of coffee with your customers.
If you don’t know what to say, tell them you’re working on new products for your company and you’re looking for ways to make your customers lives easier. Ask them what makes their job hard or uncomfortable. Don’t offer solutions, just listen and take notes, your customers will know what you should be doing.
If you’re stuck and you need a hand breaking out of a project that just won’t finish, I have helped a bunch of businesses take products out of their mothers basements and release them into the real world. I can help you too – drop me a line.
The one thing that seems to make the hairs on be back of every nerds neck prickle is networking. I don’t mean the act of making two or more computers talk to each other (cos all healthy nerds love doing that), I mean the act of getting out there and talking to actual human beings in a professional setting.
Networking is an essential tool in any business persons arsenal. If you’re going to be successful at what you love doing, you need to be able to communicate about the passion you have for your product and how it is going to change the lives of the people you’re talking to. For that communication to be as effective as possible, you need to be able to connect with others effectively, enter networking skills.
Have a read, this stuff isn’t hard, its not always an intuitive process, but it gets easier the more you do it!
Have you tried these tips? Is networking something you find difficult? Let me know your thoughts in the comments section below.