Management Structure != Application Structure

When developing an application, there’s a tendency to impose a data structure that mirrors the semantics of your management structure. It’s really not uncommon to see this kind of silliness:

  • Mega super admin
  • Super admin
  • Admin
  • Pseudo admin manager person
  • Regular manager person
  • Senior associate almost manager person
  • Associate person
  • Junior
  • Logged in customer who has bought something
  • Logged in customer who might buy something
  • Anonymous person

This is absolute insanity. The needs of your application, more often than not, will not mirror the granular needs of your organization.

An even more insane role necessity is a matrix of options, where any given person can have any singular permission, so everyone has a different set of abilities.

This is also insane.

What does the application do? What sets of responsibilities is each person fulfilling? What functions need to be protected? What data needs to be protected?

Instead of imposing your organizational structure into an application, look at what the application does, and structure permissions based on those actions.

You will find is that the application becomes much simpler and the roles easier to manage. But, perhaps as importantly, you will begin to see the application as less restrictive, and more enabling.

The most powerful and successful applications typically impose much less permission control over the users. I’m just as much of a user on Twitter as a celebrity, my boss, or those that I manage.

This isn’t a homily about flat organizational structures; instead, it is a call to simplify the role of software as it relates to our business structures. Your toolset often doesn’t need to know where you are on the ladder to be useful to you.

Powerful software is often simple and empowering. Imposing limits on users based on organizational structure is often more restrictive than useful. Structure your application data, instead, around functional restrictions. Opt for less restrictive software with fewer layers of user hierarchy.