Analyze Mercilessly

A generalization of RefactorMercilessly, acknowledging that code is not the only representation medium in software development, and that (code) refactoring is essentially applied analysis.


There are two times one can analyze: before and after the analyte is present. So there are two techniques to chose from when "analyzing".

Describe those that happen before as RequirementsAnalysis. This implies all need discovery up to AcceptanceTest definitions.

DriveByAnalysis is when you use the opposite technique by mistake.

CodeAnalysis? is when you read the code and draw diagrams with it. What better time could there be to document the shape of an app than when you have a working product to examine?


I find documentation of working code quite useful. I can convey what dozens of objects are doing with just a couple of pages of diagrams and some text. Sure, I could tell everyone to sit down and study the code, but why? At least the people I usually deal with understand a lot faster and a lot more when I explain with pictures and English (see spot run :).

Do people really find it easier to get a basic understanding of what code is doing by reading through the function/message/method calls rather than having it explained to you with diagrams and good old-fashioned English? Note that when I say diagrams, I don't explicitly mean UML diagrams. I mean whatever I can draw up to explain the meaning to my audience easily. -- GeorgeGruschow

For me, once I understand the SystemMetaphor of a project, I have enough. I think SystemMetaphor is somehow related to MeaningfulNames. -- ShaeErisson

What would be nice would be another level of abstraction that people could read to get a grasp of the structure of the system. English and diagrams work a lot better at this than any other methodology I've seen so far, but I haven't seen so much. Also, implied here is that the new level is smaller than the previous level, unlike UML which in my experiences teeters towards TheAlmightyThud. And by smaller, much smaller would be appreciated. Just the essentials... A pointer in the right direction. -- SunirShah

Sunir, I think what you're describing is the much wished for and always elusive "architectural" view.

Actually, I started this page hoping it would become a discussion of analysis techniques not bound to code analysis and refactoring. It's taking more of a direction toward abstraction. To me, analysis and abstraction are almost opposite in meaning. I prefer the classical definitions. How 'bout you? -- WaldenMathews

I don't believe in analysis in the same way I don't believe in abstraction. AllAbstractionsLie after all; not to say I don't abstract like a rabid mathematician. I just do the job doing whatever I have to as simply as I can. Analysis is a methodology and all methodology is crap. In the sense that it comes as some sort of packaged idea of "this is how you solve the problem," when often the best way to solve the problem is to do what you obviously need to do next. Maybe programming like that is a greedy algorithm. Of course, my resume claims I'm into OOAD although I don't analyze nor design in the methodology senses of those words.

Anyway (requirements) analysis to me roughly maps onto "talk to the customer to find out what you're supposed to do." I don't think it really has to be much more complicated than asking a question to clarify a problem or by demonstrating a handful of solutions and asking the customer to pick one. Sometimes you can be clever by doing research on your own, but it's basically comes down to gaining direction. Once you know how to create value for the customer, the rest is an exercise for the reader. Er, programmer/analyst. -- SunirShah

Sunir, does "not believing in" analysis and abstraction mean you don't believe they exist, or you don't believe they add value to what you do?

How do you know when you are doing a job "as simply as you can"? What if 'analysis' is not a 'methodology'? What if, instead, it is just a fundamental unit of mental process that occurs every time you separate things in order to better understand them? Why do you assume 'analysis' means 'requirements analysis'? Your comment about asking a question to clarify a problem seems right on target to me. But doesn't the complicated-ness of that depend on how much of a mess of a problem was handed you? Thanks, -- WaldenMathews

Well, a lot of what I said was flippant and tongue in cheek, so bear with me. Point by point:

By the way, the need for overview documentation indicates failure in design as the system obviously isn't simple enough to understand. Or so I feel. Some systems are just necessarily massively huge and as yet I haven't been involved with them in any significant role. -- SunirShah


CategoryAnalysis


EditText of this page (last edited September 18, 2004) or FindPage with title or text search