Tuesday, July 13, 2010

What Should You Be Good At?

Any reasonably powerful software tool has enough complexity and flexibility to handle a multitude of scenarios.  Having a lot of knobs and buttons are essential in the software development arena where environments are typically comprised of stitched together home-grown and commercial tools.  Rarely is the whole toolchain packaged and nicely integrated. The ability for development tools to be customized means that it is highly possible to solve your business problem using best of breed technologies.  It also doesn't hurt that engineering teams are highly capable of building most anything. However, the path to achieving that goal through in-house resources is often difficult and oftentimes impractical.

Any department, particularly the engineering department, must recognize that they must have a set of core competencies that are strategically essential for their company to succeed.  Providers of software are in a highly competitive environment where differentiation is critical. Not surprisingly, these core competencies are the areas that must be focused on, cultivated and maintained from an engineering standpoint.  Some examples of core competencies are the ability to:
  • produce particularly high performance, highly scalable transaction systems
  • add relevant features quickly to be first to market
  • consistently deliver the most reliable systems
  • deliver the most elegantly designed and easy to use systems
Successful companies deliver on the levers that matter the most in a competitive industry.  It could be feature leadership, process leadership, user experience leadership or likely a combination of things.  The ability to leverage your core competencies comes from having the right talent and the right environment to help them succeed.

Where are your levers?  Where should you focus your team's efforts?  What competencies should you build and what should you outsource?  Where should you invest and by how much?  Should your team be experts at building features that matter or having expertise in software development infrastructure?

In the most extreme case, one could argue that you should outsource everything that is not within your core competence.  The benefit is that you can focus on being best of breed in the areas that matter to your business while getting best of breed from outside providers in the areas that matter less.  In the other extreme, you can do everything in-house, the "not invented here" syndrome.  The benefit is that you have control but the downside is that your focus is diluted and your costs greatly increase as your needs change.  Culturally, engineers have tended towards the "build it in-house" approach because they can.

With regards to static analysis, how much of software development infrastructure is truly strategic to your company?  How much can and should be outsourced to some outside help?  Where can you get the most leverage from your team's resources to focus on the areas that will make your software development organization a leader in the industry?

No comments:

Post a Comment