A good day at work is when the CEO calls all of the developers and staff in and says, "I'm putting you all back together as one team. Let the code flow."
Today was such a day. Praise the Lord Almighty; change at last.
Verticals in small companies make for good bookkeeping but bad development. Too many product lines emerge and given platforms, versions, customer domains and the local politics of sales and development, it doesn't make for a merged set of services, and more importantly, a sharable codebase. As Jack Welch taught GE, the goal of enterprise engineering is to take OUT work.
The first and last bit of business is product. No idea no plan no product no customer no pay. Services are in the long tail, but they don't have a network effect. Timely innovation is where the risks are and all the fun.
The essential challenge is the codebase. No d'oh. Even if a software company is not publishing open source, within it's own IP and contractural boundaries, it must practice open source to reduce the semantic load from the applications. Uncertainty is proportional to semantic load, thus the high cost of reliable customer-specific adaptations. Where cost == features, features lose unless the business model is features. Customizations cost, implementations cost, conversions, new forms, new interfaces to old systems, help desks, technical documentation, all are features with costs. You Mr. Customer, get to choose what you want.
"Speed is money, how fast can you afford to go?" (Ron Harlow)
Some dumb costs:
1. Rich formatted printed forms designed to reduce the size of a file cabinet but obsolete in the digital age. Yeah, I know about the law and printed forms, but really, get over it. You are out in the range of 10k to 20k to get one from a vendor given a complex report. Simplify.
2. Interfaces to legacy systems. This is unavoidable for ecologically active software environments. Do work with the IT staff to work out with the vendor how to phase this better. Beat the everloving tarnation out of the vendors who refuse to work with you on this. Remember, you pay for it.
3. Multiple languages and platforms are the maximum contributor to dumb costs in software development. Specialty languages seldom are. On the other hand, in an active web environment, failing to master the skill of XML application language development and implementation and not just the standard implementation of a standard vocabulary is failing to master survival. Tags are local even if they are not.
If you are an IT wonk, do the software hood a favor: read the RFPs the contracts wonks are publishing. Show some nuts and insist on taking out the excess. Simpler is more reliable. Cheaper too in most cases.
If shooting consultants is necessary to achieve this, party on. Consultants are just salesmen in lawyer's clothes; bounties vary. I'm not saying consultants aren't useful, but use them wisely, then feed them to a tank of piranha. Fast replacement rates strengthen species.
If there is a lesson to the last of the big ticket big iron vendors from the lowly but doing ok web developers, it is this: less. Use the basic web languages to do as much of the work as you can. The tradeoff of rich vs reach is not just a tradeoff with your customer but within your codebase. You trade on opportunity and cost when you deal in complexity as a barrier to competition.