Working Through Ideas

One of the most common problems that seems to flummox software engineers is the good old "where to start?"  If you've never encountered this problem, you've probably never attempted to do anything even remotely interesting. If there is a clear beginning, odds are you are attempting to do something someone else has done to death. We call these "solved problems". 

So let's assume you're living in interesting times, and have a problem which is both not "well known" and probably "poorly defined". These problems consist of a great many of the sort an interesting career is built upon.  So how do you work through a vague idea and produce a result?

Well to start we take a stab at defining our problem:

  "I need my computer to understand English spoken by a
  Non-native speaker with a thick accent or brogue"

Now this might not be the case, this might not be the actual problem, this might be a redherring. But for now we have a working definition which we will revisit after some exploration. 

Next we'll do research into linguistic models, phonemes, Bayersian filters, Fourier transforms, syntactic forms, genetic algorithms, and psychoacoustic modeling.  Which will leave us with the next most common question:

  "What do I do next?"

Like the first problem of where to start, how to continue is equally troublesome, because at this point you've already ruled out the possibility that your problem can be rephrased in terms of "well know" solutions. This is a bitter pill to swallow because it means you are going to invest in a long cycle of trial and error to discover a functional solution. But buck up, because you're at this point there are only two options:

  1.) Try Something and Fail
  2.) Quit

Note, success is not an option at this point. The reason for this is we still haven't defined what it means to succeed. Does it mean:

  "every speaker in the world is understood by my computer?"

Or do we really mean:

  "enough of the samples I've tried seem to work ok"

The level of error that is acceptable, the number of false positives & negatives, the cost of implementing, the operational characteristics, and even feasibility with a set of techniques has not been determined. 

If you think of your solution as an organism and the problem space as the environment, your organism needs to test its fitness against the environment to see if it survives. Other competing solutions are also necessary in this environment to find a best fit. Change the environment and you change the likely best fit candidate. Radically change the environment and you're likely back to square one after all your solutions go extinct. 

This is what we mean by trial and error, we mean an evolutionary process by which we identify a solution by successive revision. There is no final answer usually, merely a continuum of possible answers that make the acceptable  use of the available resources producing a minimally sufficient output. 

At some point, we revise and test our way to a solution or don't. But that leads to the third and most important question:

  "When to call it quits?"

Often this is phrased in terms of the word "done" and can be thought of defining done.  You will never find the perfect abstract solution that meets all requirements and uses no resources.  Doing so can only be done by redefining the problem away, and canceling it out with some other point of view.  And while this may work in your circumstances, it does not produce a solution, just avoids the problem:

  "I will have an automated call center connect the non-native speaker to a human who will operate the computer for him"

Some times this is considered out of the box thinking, but really it is just changing which box you're working in. SSDC.  What is important is that you know what your tolerance for investment is, and what your expected rate of return will be. The equation for calling it quits is a "solved problem" with "well known" solutions. 

  Probability of Success * Return - Costs > Opportunity Cost

Where Opportunity Cost is the amount we'd make doing something else with the investment, like playing the lotto or betting on horses (you can play the stock market, but it's the same game).  If you sink in $250k with a 10% chance of success, you need to a return of $2.5m to break even. If you put could have put that $250k down on a rental property with a 7% rate of return over 10 years (doubling period), you'd need a return of $5m to cover your opportunity cost. ($500k after 10 years is a wash). So quit while you are still ahead.