i also think it is very important that the communication or working dynamic between the programmer and the project's lead and techs is solid. someone that is 100% on their programming capabilities may face complications if they aren't given enough input on what product to produce, or installers don't know exactly how to hook things up. seems simple for small systems, but add multiple zones and multiple subsystems, and things grow in complexity exponentially. simple problems in larger systems can be complicated to troubleshoot and having multiple variables in a problem can delay or even make impossible to find a solution (while remaining profitable).
i don't consider myself strictly a programmer, but also tightly integrated into the design process. i do all the drawings for my clients and demand that this service is packaged into the deal with few exceptions. w/o such organization, quite frankly i wouldn't want to be involved. the overall solution is more important and more interesting for me.