The Hierarchy of Webapp Needs

Posted:

I was thinking about all the little projects I work on and how they grow over time. The applications end up hitting some milestones and end up needing similar functionality that compliments the core features. A small project ends up getting complex enough that it requires some unit tests. I’ll go to deploy the project and now I need some deployment scripts and analytics to ensure the application is running correctly. The technology may change between each project, but web applications always seem to have the same steps that need to be taken to strengthen the application as it is scaled up.

At a large company, adding a new set of functionality always has a suite of concerns to think through before implementation: how will we deploy this feature, how do we validate that users are using the feature like we expected them to, how do we monitor for bugs and errors? This is on top of the basic functionality of actually writing and testing that new feature.

What if we thought about this like Maslow’s Hierarchy of Needs, but in the context of a web application.

Maslow's Hierarchy of Needs is a psychological model of human motivation proposed by Abraham Maslow in 1943. The model describes a hierarchy of human needs, beginning with basic physiological needs such as food and shelter and progressing upwards to higher-level needs such as self-actualization. Maslow argued that as humans satisfy their basic needs, they can move on to satisfy their higher-level needs.

Applying Maslow's Hierarchy of Needs to web applications, we can identify the different levels of needs that need to be met in order to make a web application successful.

Basic functionality:

  • A single build/run script
  • Basic functionality (e.g. CRUD operations for a web app)
  • User interface (e.g. layout, navigation, responsive design)
  • Integration with external services (e.g. databases, APIs)

Safety and security:

  • Linting (e.g. ESLint, Prettier)
  • Unit tests (e.g. Jest, Mocha)
  • Basic error handling and reporting (e.g. logging, alerting)
  • Input validation (e.g. form validation)
  • Security best practices (e.g. encryption, password hashing, session management)

Love and belonging:

  • Basic analytics (e.g. page views, user engagement)
  • User authentication and authorization (e.g. sign-up, login, role-based access control)
  • User feedback (e.g. contact form, survey)
  • Social media integration (e.g. sharing, commenting)

Esteem:

  • Advanced analytics (e.g. user behavior tracking, A/B testing)
  • Performance monitoring (e.g. load testing, monitoring of server resources)
  • User experience optimization (e.g. user testing, usability analysis)

Self-actualization:

  • End-to-end testing (e.g. Selenium, Cypress)
  • Accessibility and internationalization (e.g. support for screen readers, translation)
  • Scalability (e.g. load balancing, caching)
  • Continuous integration and delivery (e.g. Jenkins, Travis CI)
  • Deployment (e.g. Docker, Kubernetes)
  • Automated testing (e.g. unit test, integration test)

Of course this list isn’t exhaustive, but I’ve been thinking about it as more of a checklist to build upon when working on small side-projects that end up getting significant attention and development time.