Steve said:
If just starting out you want to first choose a core to build around - something like the Elk M1. Then do sections at a time - security, lighting, HVAC, and other things as desired.
Of course if choosing a core to build around is the problem you are trying to resolve then here are some additional things to think about:
There are basically two types of core controllers; PC based (Homeseer, CQC, ECS, MisterHouse, etc.) and dedicated hardware platforms (Elk M1, Homevision, Ocelot, etc.) If your not sure which is right for you, just ask that specific question and you will likely get lots of views and input.
There are also two philosophies about subsystems. One camp feels that critical subsytems such as security, Home Theater, HVAC, Telephone, etc. should be stand-alone sytems that will continue to function even if the HA system is off line. They are enhanced by being attached to a HA system but do not depend on it. The other side wants the central brain to control everything. In the second scenario you might. for example, have a voice announcement to tell you when there is a phone call instead of a phone ringer. If the HA system is down, you don't know when a call comes in (but the rest of the time it is pretty cool). Again, if you don't already have an opinion ask the specific question and see what feedback you get.
Another consideration is whether or not you want your controller to have a primary focus or bias. In my religion a Home Automation controller is essentially a Programmable Logic Controller with pre-defined I/O interfaces for use in home automation applications (lighting, ascii serial, contact closure, analog measurement, etc.) but no initial bias towards Security, Energy Management, Home Theater, or anything else. Others like systems that have one of these functions at their core with the option to add other functionality. You will have to decide what would work best for you.
A fourth consideration when picking a core controller is what it takes to program it. I prefer menu driven code builders because it lets you focus on the logic of what you are trying to code without getting distracted with syntax issues. A lot of folks here are programmers by trade so they prefer to work in some generic language that they are already familiar with. It pretty much depends on your background and what kind of learning curve you are willing to take on.
If you can define a preference in all four of these areas it should be pretty easy to identify the core controller that is best for you.
Hope this helps.