The best way to avoid scope creep is to diligently itemize every feature you want to see in the final product before any work begins. If you want to be able to search your customer database by hair color, make sure that feature is clearly accounted for in writing early on. It's also worth heeding your developer's advice on this front: Experienced developers can help you spot extraneous feature requests early in the process, and you may be grateful for the resulting savings in time, dev costs, and reduced complexity, even if it means your pet feature has to die in the womb.
Perhaps the biggest downside to outsourcing is the missed opportunity to build institutional knowledge about the app itself. As data becomes increasingly critical to business operations, it's good to have staff on hand who really know the ins and outs of the software that drives the business. Custom apps built by outside contractors present a unique problem for IT teams, because ongoing support generally depends on the availability and affordability of the contractor who built the software, and switching developers can be difficult and costly for highly customized apps.
The DIY approach
Tackling Web and app development in-house can offer some distinct advantages over outsourcing, but there are significant barriers to entry and some ongoing challenges as well. Here's a short list of the most striking pros and cons.
It's worth noting here that, for the time being, I'm deliberately ignoring the prospect of just going out and hiring an experienced programmer to join your team. Doing so can, obviously, help overcome many of the cons on this list, but it also comes at considerably greater expense than either of the options we're discussing in this article, since experienced programmers command salaries well above the six-figure mark.
The most urgent fact to focus on when considering cultivating in-house development talent is that the learning curve for software development can be immense. It's not excessively trite to say that some people just aren't cut out for it. Learning to code requires a highly analytical mind with a penchant for abstract thinking and incredible attention to detail, as well as a serious investment of time and mental focus. Those who succeed at it generally bring a single-mindedness to the work that eclipses their ability to focus on other things. (And make no mistake: Tackling custom app development will absolutely limit the candidate's ability to work on other projects.)
DIY development only really makes sense when you've got someone on your team whose background and interests already align with the task. Good prospects include IT staffers who've built some websites already or done some software customization or scripting in the past, or otherwise highly analytical types who enjoy delving into deep, thorny tasks and don't lose their cool in the face of apparently unsolvable problems. (Apparently unsolvable problems are a daily occurrence in the life of a developer, and the thrill of solving them is like crack to a good coder. So pick a tenacious geek and give him or her plenty of support and latitude to learn, explore, and create.)
A warning to sole proprietors and very small companies: Programming is massively time consuming, and development projects often require way more time and resources than we estimate on the front end (even for professional dev teams). If you can't afford to devote a full-time worker to nothing but programming for several months, you're better off outsourcing the project. If you're a sole proprietor thinking about doing your own dev work on the side, be prepared to sacrifice all of your nights and weekends for several months just to get started. I'm not saying it won't be worth it, but if you've got a family or a social life, you're in for quite a shock.