views:

84

answers:

4

While developing products, we often need to create proprietary tools to test some of their unique features or diagnose problems. In fact the tools can be at lest as interesting as the products themselves, and some of our internal groups have asked for copies of them.

So, aside from the obvious business-driven rules (e.g. don't retrieve sensitive data), what do you differently when you build personal or internal tools, as opposed to for-sale products, and why?

What's more (or less) important to you in internal tools, and do you consider overall value to the company when you build them?

Thanks for your thoughts!

+1  A: 

From an engineering perspective, I wouldn't do anything differently:

  • Both internal and for-sale tools need to be well-written and well-documented
  • Both need to be created given a set of requirements, deadlines, budgetary restraints, etc.
  • Both need to be tested or validated

The one big difference I see would apply to the for-sale products as opposed to the internal tools: for-sale products need marketing, support, etc that internal tools can do without.

Additionally, since internal tools will be used in a somewhat more controlled environment, they don't need to be tested against different computer systems, Internet browsers, etc.

David
I agree. Does this also apply to the tools you build for yourself?
Adam Liss
I'd say that those can be a little rougher around the edges, if ONLY you will be using them.
David
True, but in retrospect that was probably a trick question, as a tool's utility is inversely proportional to the number of users for which it was intended, yet the likelihood that a tool will "escape" is directly proportional to its utility.
Adam Liss
+2  A: 
  1. First, internal tools are always developed quick and dirty. Almost no testing - it just has to do the work.
  2. UI is not as important as with a customer-facing app.
  3. Internal tool can use internal/private/proprietary knowledge of the products and frameworks they test. For example, our last product bypassed part of our published API and used a non-documented web service call to achieve better results.
  4. This is an important point,but a losing battle: NEVER EVER leave internal tools with a customer. As a consultant, I sometimes had to use and even develop those tools in the field. I try to hide it from my clients, but from time to time, they demand I leave the tool with them (or worse, call the sales rep and ask for that "magic tool"). You don't want customers judging your entire company's production level based on tools build according to points 1-3.
Traveling Tech Guy
I like your sense of practicality. I particularly agree that internal tools are verboten for customers. You might consider keying them to a development system (it needs the compiler .dll and it would violate my license to give that to you), but you're fighting work-for-hire laws.
Adam Liss
A: 

Since the diagnostics I build are usually very special-purpose, I tend to provide more options and built-in examples than I would for customer-facing products. In other words, I assume the user is more familiar with the technology than a customer would generally be, and I provide more ability to tweak the way the tool operates without worrying that it might overwhelm the user. But I also try to make it satisfy 80% of the use cases without much "help" from the user.

Adam Liss
+1  A: 

The biggest difference:

It's with the personal and internal tools that you can be more free to try out a new technology, the latest fashion. You can take risks that you wouldn't take with the application that you are actually shipping to customers.

Corey Trager
... which, interestingly, often leads to a technology or technique that can later be applied to your products. Thanks!
Adam Liss