Skip navigation.

Archives

Agile Development Practices teaser podcast

I’ll be giving a keynote at Agile Development Practices. Joey McAllister of SQE interviewed me about it. The focus is on what’s missing from the Agile Manifesto. I think of the Manifesto as a contract proposal from a development team to the business. They offer to not surprise the business, deliver working software frequently, and [...]

Python - Job Paradox

Paul Graham has some great essays online that made up the content of his book: Hackers & Painters. One of my favorite posts is The Python Paradox, which presents something rather counterintuitive at first read:

"I'll call it the Python paradox: if a company chooses to write its software in a comparatively esoteric language, they'll be able to hire better programmers, because they'll attract only those who cared enough to learn it. And for programmers the paradox is even more pronounced: the language to learn, if you want to get a good job, is a language that people don't learn merely to get a job.

This concept may be a little scary to some. Learning an esoteric language improves your chances at getting a "good" job? (presumably "good" meaning one you like) But what about all the recruiters salivating for Java/JEE and .NET programmers?

Brainstorming; solo think sessions

So there’s brainstorming in a group and then there is what I think of as brainstorming alone. I often brainstorm alone. The reason for this is that I frequently work alone on projects. The other reason for my solo brainstorming sessions is bundled up in my INTJ personality and my preference to have alone time to think through situations and problems without distractions or other people’s influence (at least sometimes). I like to have my own grounding time before noodling on a problem with other people.

I’ve been thinking about how to describe my solo think sessions. The reason is that I’m actually quite curious about how people analyze things. I’d like to analyze analysis.

TotT: Contain Your Environment

Many modules must access elements of their environment that are too heavyweight for use in tests, for example, the file system or network. To keep tests lightweight, we mock out these elements. But what if no mockable interface is available, or the existing interfaces pull in extraneous dependencies? In such cases we can introduce a mediator interface that's directly associated with your module (usually as a public inner class). We call this mediator an "Env" (for environment); this name helps readers of your class recognize the purpose of this interface.

For example, consider a class that cleans the file system underlying a storage system:

// Deletes files that are no longer reachable via our storage system's
// metadata.
class FileCleaner {
public:
  class Env {
  public:
    virtual bool MatchFiles(const char* pattern, vector* filenames) = 0;
    virtual bool BulkDelete(const vector& filenames) = 0;
    virtual MetadataReader* NewMetadataReader() = 0;
    virtual ~Env();
  };
  // Constructs a FileCleaner. Uses “env” to access files and metadata.
  FileCleaner(Env* env, QuotaManager* qm);
  // Deletes files that are not reachable via metadata.
  // Returns true on success.
  bool CleanOnce();
};

[ANN] A Public Offering of my Agile Testing Class

And now for a blatant commercial announcement: I’m hosting a public offering of my Agile Testing class with Dale Emery on December 10 and 11 in Pleasanton, CA.I predict that this is going to be a great class. First, it features my WordCount simulation, and that’s always fun. I’ve run that simulation over 100 times [...]

Pylot and WebInject - Chosen as "Top web application load and stress test tools"

Pylot (my web performance test tool) and WebInject (my web functional test tool) were both just named on the "List of top web application load and stress test tools" from WarePrise.

Evolution of a Kanban board

In No More Iterations I showed our 1st attempt at a kanban board. Now that we have a little more experience I'd like to show you where we are now and where we stopped on the way.