When people plan to build a house, they may contract an architect to design it. He’s expensive, but he’ll make sure you get exactly what you want, is up to code, and will probably even suggest things you will also want to potentially add that you didn’t even think about. You’re not stupid…he’s just good at it and it is what he does… and he’s done it a lot.
When it’s time to actually build the house, you don’t generally give that guy a hammer. He’s probably done it. And he’s possibly efficient and meticulous. But a carpenter can do the job, and he can probably do it for a whole lot less per hour. Of course, your carpenter probably isn’t also a licensed electrician… or plumber. You’re going to have to contract several people/firms. And you’re going to want to make sure they are good at what they do. Not pretty good at doing everything.
When you plan to build an application, you want to have it thought out by a guy that has built things before. And someone who is good at it. A Software Architect that can take your ideas and requirements, and design a solution that gives you exactly what you want, is up to code, and will probably even suggest things you will also need potentially to add that you didn’t even think about.
When it’s time to actually build that application, you don’t generally give that guy a keyboard. … you’re getting the point. Hire a Software Developer. More specifically, hire a Software Developer who is exceptionally good at the specific things that the design requires.
When I first started working (some 20+ odd years ago), I fancied myself as a Company Man. Think old-school IBM… back in the day when you gave a company your life, and they took care of you for life. Unfortunately, I was born about a decade too late for that to be a useful career plan. The industry gained momentum. So many technologies, languages, platforms. Just as the medical field advanced from the days when a generalist could do everything, now we require specialists. And it is impossible for anybody to be a specialist at everything.
So, why do some developers feel underpaid? Because for the most part, the current industry will hire full-time generalists. And a general developer doesn’t always provide a service that requires a specialist level of pay. Companies hire the software equivalent of a handy-man, because they may not always understand what they are going to need, and when they might need it. In fact, some of the today’s larger companies actually do employ a cavalcade of specialists but treat them as a group of generalists due to a lack of specialized skill tracking over time.
So, if you pay your Architect a Carpenter’s wages over the course of a year, then he’s going to feel underpaid. Alternately, if you need an Architect for a couple months, but you hire him full-time for an entire year (worried you might need him), then he’s going to feel overpaid for the carpentry work. He probably won’t complain about the money… but he knows you and he is both not getting the full potential.
Unless you’re a company of plentiful ideas and solid R&D budget, don’t hire a full-time Software Architect. You should contract a Software Architect. Let him work with you to design (or re-design or performance analysis/improve) your applications. Then hire or contract (or search your current developer base) the right team of specialists/generalists to build and maintain from a solid foundation.
That provides a value proposition that is appealing to both sides of the coin.