Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Tools and frameworks make complex tasks simple. This seems like something that would be supported by KISS(keep it simple stupid). Tools and frameworks also have the potential to introduce leaky layers of abstraction, where the complexity of the issues are far more problematic than anything you would have written yourself. I am not interested in the effectiveness of tools and frameworks, since that is more of a religious opinion, and can be kept private. What I am interested in is whether or not tools and frameworks are favored by KISS. Obviously some layers of abstraction are accepted by just about everyone, but there are plenty of examples of edge cases where it is harder to tell. For example:

For a web service in .Net, would KISS favor a basic WCF service (super easy to create; fairly difficult understand/see what is actually going on under the hood) or a basic REST service (more challenging to create; easier to understand/see what is actually going on under the hood)?

Note: There are plenty more examples of this, so feel free to suggest more appropriate ones.

share|improve this question
up vote 1 down vote accepted

It depends on your uses. I can assure you that if I were laying the groundwork for a large-scale application, web or otherwise, I would absolutely look for frameworks and libraries that would reliably make my job easier. If I'm building a web platform, that would include things like MVC and logging frameworks. The reason for this basically boils down to the amount of attention an individual aspect of the system receives. If I have ten developers, I would like them to be able to focus on our business logic and our customers, and leave the logging system to another external group of developers who focus entirely on that system. It's simpler in that there are fewer concerns for your team to manage.

Then again, I'm probably not going to use the same MVC and logging frameworks for a one-shot batch script that I wrote to normalize a few gigs of data. That would be overly complex.

share|improve this answer

Does KISS encourage tools and frameworks that expose complex leaky abstraction layers?

No. Abstraction is simple, leaky abstraction is not.
You don't want to see, what is under the hood of something, because you want to concentrate on what you hide under your hood. You want clean and robust abstraction barriers between your simple modules.

Simplicity is one of the best metrics for the quality of a library. KISS favors simple libraries, so do I, so should everyone IMHO.

share|improve this answer
I agree with you, but I think you misunderstood what I am getting at. Of course, bad abstraction is bad. All abstraction, however, has leaks and will presumeably need to be tweaked at one time or another. – Morgan Herlocker May 10 '11 at 19:46
@ironcode: Properly done, abstraction has no leaks. At least Abelson and Sussman convinced me. Of course many libraries have leaky abstractions, in an attempt to give client code more control, but this is a violation of KISS. – back2dos May 10 '11 at 20:35
>Abstraction is simple, leaky abstraction is not. Really? In my experience, leaky abstractions are almost invariably caused by oversimplifying the problems that they're supposed to be abstracting away. – Mason Wheeler Aug 1 '11 at 20:37
@Mason Wheeler: Oversimplifying is to simplicity what perfectionism is to perfection. Proper abstraction is simple. Anything else is just a failure to achieve it. – back2dos Aug 1 '11 at 21:02
I would not (necessarily) associate abstraction with simplicity: abstraction means to draw a line and say "everything above this line is visible and usable to the user, everything below this line is hidden and can only be used internally to implement the public interface". A leaky abstraction is IMO an abstraction that does not respect this promise: it promises to hide implementation details X, Y, and Z, but then requires the user to consider them in order to use the abstraction correctly. This has nothing to do with how complex the public interface is. – Giorgio Dec 4 '12 at 10:02

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.