One of the things that we – that is, developers and designers – hear more often than not is that plugins should “do one thing and do it well.”

But what does that mean?

I think that it sounds good in theory but I’m not convinced that if you were to ask each developer and/or designer separately what that means, then you’d get a variety of answers.

I think that there’s a reason that we feel this way, but I’m not really sure that we know what it even means.

For Developers

As far as developers are concerned, many of us tend to subscribe to the single responsibility principle.

Straight from Wikipedia:

In object-oriented programming, the single responsibility principle states that every class should have a single responsibility, and that responsibility should be entirely encapsulated by the class. All its services should be narrowly aligned with that responsibility.

In WordPress – and even other languages and platforms – developers often extend this particular principle to lower-level components like functions.

After all, if each function has a single responsibility then they are easier to unit test, and if a class follows a single responsibility, then the overall understanding of the code should be improved as well its maintenance, cohesion, and the continued evolution of the software.

For Designers

I’m speaking a bit out of my wheelhouse here (so I’d love for a designer to chime in especially if I’m way off base), but there appears to be a strong effort for designers getting back to simplicity, less being more, and so on.

Dieter Rams is quoted as saying:

Less, but better – because it concentrates on the essential aspects, and the products are not burdened with non-essentials. Back to purity, back to simplicity.

In theory, it sounds easy to design for simplicity and to aim for less, but ask any high quality, professional designer and they’ll tell you that it’s a significant challenge to reduce something into it’s functionality simplicity all the while keeping it elegant.

“Do One Thing and Do It Well”

So from both a developer and a designer perspective, we have an idea as to what constitutes doing one thing well both at the microlevel – that being functions and smaller components of designer – and at the macrolevel – that being the overall software and layout, utility, or functional aspects of a product’s design.

But how do you guys determine what constitutes doing one thing?

For example:

  • Are plugins like Easy Digital Downloads and WooCommerce considered plugins that do one thing (that being commerce) or do they provide too many features involved in the selling of digital goods?
  • What about something like the WordPress Importer? It imports data, creates and/or maps it to other users, and brings in data. Those are three things each of which compose a single operation – importing. Should it technically be three separate plugins?
  • The Developer plugin, much like JetPack, serves as a front end for installing and managing a number of different plugins. Is it doing one – or many – thing(s)?

I have my thoughts on all of this, but I’m hoping to discuss it more in the comments. So, with all of that said, it’s your turn.