There are a sort of way to develop a computational system. Each one of then will let to a different place and it depends on the type of management are bean used. I'm particularly involved in some projects with a variety of development/management style.
There are a lot of companies doing outsourcing, this is good, it let you focus on your business and run a lot of things concurrently, but a project isn't just a delivery it's a live organism and you can't foreseen all you need in. It's very common to the outsider see the things in other ways, and you need to light all the way thought, but wen you find the good one, that who see as you see, you need to keep then.
Doing everything internally has it good and bad sides too, as outsourcing. The are the other things you must think, the system that is currently running, the bugs, the server crash, etc, but you can take advaced of the business knowledge you alread have.
To choose what way to go is sometimes difficult, you need to balance a lot of things to take that decision but a mix of the two is something very useful.