Throughout our careers, we're often faced with new situations where we have to "come up to speed" quickly. It may be a new project, or we may have taken on a new role (or both), or we may have switched technologies, moved to another company within an industry, or even switched industries. Whatever. The immediate result is that we find ourselves outside of some of our old spheres of competency, and have to rapidly acquire competencies in the new situation.
Over the years, I've learned or developed several strategies for rapid adaptation, a few of which are general enough that I'll try to cast them as patterns.
-- DaveSmith (3/8/96)
In general, I have attacked the ComingUpToSpeed problem as follows:
I also find that being the VisitorFromMars helps because I don't have the same preconceived notions about the system (i.e we've always done it this way) that everyone else has. (Instead, I have my preconceived notions about what the system should have -- without knowing the system at all!! :) )
-- ShalomReich
In addition to playing the VisitorFromMars, I try and see what the system reminds me of. By this, I mean that I look for Patterns. Often what has been built (or is being built) will remind me of a previous system. Or, sometimes I can get an idea of the nature of the problem being solved and generate fresh ideas which can lead to a more general solution.
For example:
I was once asked to develop data field validation routines for dozens of very specialized database forms. They wanted to prevent invalid data from being submitted from a client machine to the server (to reduce network traffic and turn-around time). The team spent days trying to get me up to speed on the what the data was being used for and the specific calculations that would need to be performed to validate the data.
Given the time constraint, I offered a solution that generalized the problem. That is, I suggested developing a scripting language that could be tailored to each type of data field validation requirement. This language allowed the team experts to quickly write data validation routines that also proved flexible (it was easy to change the routines upon customer requests). (I owe the insight of my solution to the book ThinkingForth...)
A VisitorFromMars can often see how specific problems really aren't that specific.
c.f. GettingUpToSpeed, which comes at this from a slightly different angle.
How have you handled ComingUpToSpeed?
I've been thinking about this in the area of software development (I working in a unfamilar language in an unfamiliar style). Here are some ideas. Are these parts of larger patterns?
If you have documentation only, create test executable that perform small functions (a few api or library calls with life-support). Keep these around - these greatly speed up debugging the larger system later.
If you are blessed with existing, working code, copy it, document it, and tear it into pieces that demonstrate distinct functionality (this shows reading from/writing to a database, this show creating a UI, etc).
Or take the code, strip out what you don't need, and use it for a template for what you are creating.
And while ComingUpToSpeed, alive but Frankensteinian is often better than beautiful but dead.
ComingUpToSpeed, PatternMining, and several other things are forms of Analysis.. figuring things out. Related stategies can be found in GuerrillaDomainAnalysis and ScenarioPlanning. -- MichaelFeathers
See also GettingAcrossTheDomain