For a company looking to acquire IT consulting services, it can be difficult to determine just what services it, in fact, needs. Of course that depends on the kind of opportunity we're talking about. If a company knows it needs a .NET developer for 6 months, those requirements are already well-defined. A simple request to a reputable technical staffing agency can get that slot filled quickly. As a rule, the better defined the requirements, the easier it is to fill the open slot. But the problem gets more complicated when considering company needs on a more abstract scale.
For example, think about a company that wants to build a new product, develop a new consulting line, or significantly modify its own internal IT systems. These are big propositions, each with a significant software component. It is clear that writing code is not the only aspect involved. For example, how will all the features and functions of a new software product be captured and defined so they can be successfully built into the product? Leaving this important task to the programmers and engineers has proven unsuccessful.
What about the company building a new consulting line—what does it need? Is the company looking for someone to write code? Or capture requirements? Or identify new customers? And in the case of a company making a major modification to internal IT systems, this can be such a monumental rat's nest of competing connections, data stores, business processes, etc. that, in some cases, man years of work are required before a single line of code is written. All of these are "technical" tasks, but each requires a different combination of skills.
So—you're the manager. You've been tasked with designing, building, implementing, selling or otherwise taking from design to reality something new. To whom do you turn and for what do you ask? What kind of skills should you seek to add permanently to your team? And what kind of temporary help should you get from consultant(s)?
The first place a company will look for help on a new project is to its existing pool of IT staff. And, in many cases, that staff contains only programmers and a single manager. This is a configuration many small to mid-size companies find comfortable. They see non-programmer IT folk as more "fluff" than "stuff". Whatever their current skill sets, it may make sense to expand the permanent team with someone who knows a necessary new technology and who can develop and maintain the new system.
Below I've outlined a few of the first cut critical skills I would look for when engaging an IT consultant to help with big projects. Some may argue that these are skills companies should make permanent, due to their current absence on the team. But, these can also be seen as specialized skills that aren't needed permanently. Right or wrong, that is a common mind-set for small teams with tight budgets. Whether permanent or temporary, the important point is to not discount the necessity of these skills on a large project.
A definition of business analysis is the "discipline of identifying business needs and determining solutions to business problems." This seems pretty generic and not necessarily 100% software related. All that is true. But business analysis, in one form or another, is a big part of any system implementation or new product design.
Consider this: programmers are great at taking a decent (or sketchy) specification for some functional component and turning it into automated software gold. But where do those specifications come from? Who captures them? Who determines how this thing should work and who takes a holistic view of the entire product? The business analyst.
This role is crucial for building solid, well-considered software and systems. Programmers are great at automating tasks in excruciating detail. But, in any big project, someone needs to take a wider look at the entire design and make sure it all makes sense. Someone needs to ensure that the overall flow creates a intuitive processes and looks like a single, unified system. Without good business analysis, it is likely that your products will lack consistency, internal system designs will miss critical connections to other applications and processes will not be fully understood.