is Aaron Skonnard's article in the June 1998 Microsoft Systems Journal
about creating reusable components. The following paragraph caught my
> For example, suppose you want to create an application that uses HTTP to
> communicate via TCP/IP with different servers across the Internet. The
> natural approach would be to write WinInet-based Win32 functions to
> handle data transmission. Most overhead-conscious developers would
> look for ways to make the functions reusable and generic.
> Object-oriented developers might even develop their own C++ classes to
> encapsulate the desired transmission functionality. Regardless of the
> transmission implementation, every task is going to require different HTTP
> methods, headers, input data formats, host names, port numbers, and
> parsing routines to handle the various HTTP response formats. To add
> another layer of complexity, some requests may require Secure Sockets
> Layer (SSL) and some form of authentication, while other requests may
> simply transmit clear text.
It's striking to me that though the contexts have changed, reusability
continues to be a problem in software engineering that people write
about. And adding complexity to the APIs isn't going to assuage the
problem at all.
The more I look at things, the more I think the simplest possible
solution is the one to shoot for. It's a design lesson I keep
It is not enough if you are busy. The question is, what are you busy
-- Henry David Thoreau