← Back to list

Why Most Angular Teams Create Too Many Services (And Too Few Boundaries)

Angular Doesn’t Have a Service Problem

Dipak Ahirav in Angular Engineering · 2026-06-30 15:23 · 45 claps · 2.8 min read paywalled
#angular #software-architecture #software-engineering #architecture #frontend-architecture
Open on Medium ↗
Wiki topics: 🌐 · Web Development 🧠 · Mental Wellness 🏛️ · Architecture

Why Most Angular Teams Create Too Many Services (And Too Few Boundaries)

Angular Doesn’t Have a Service Problem

Open almost any enterprise Angular project.

You’ll probably find folders like this:

customers/
   customer.service.ts
   customer-api.service.ts
   customer-cache.service.ts
   customer-helper.service.ts
   customer-filter.service.ts
   customer-search.service.ts
   customer-validation.service.ts
   customer-state.service.ts

Everything is a service.

Everything is injectable.

Everything compiles.

So why does the application still become difficult to understand?

Because the real problem isn’t the number of services.

It’s the lack of boundaries.

**Not a Member? Read for FREE here.**

Services Become the Default Answer

A new requirement appears.

A developer thinks:

“I’ll create another service.”

Another requirement arrives.

Another service.

Soon the feature contains more services than components.

Not because Angular requires it.

Because services have become the default solution for every problem.

Services Are Tools

Angular services solve one important problem.

They allow behavior to be shared.

They encapsulate logic.

They participate in Dependency Injection.

That’s excellent.

But they don’t decide:

  • Ownership
  • Feature boundaries
  • Communication rules
  • Business capabilities

Those are architectural decisions.

The God Service

Every large project eventually creates one.

CustomerService

Inside you’ll find:

  • API calls
  • Cache
  • Search
  • Filters
  • Export
  • Validation
  • Analytics
  • State
  • Notifications

The service slowly becomes the entire feature.

The component shrinks.

The service grows.

Complexity simply changes location.

More Services ≠ Better Design

Imagine two features.

Feature A:

CustomerFacade
CustomerStore
CustomerApi

Feature B:

CustomerApiService
CustomerCacheService
CustomerExportService
CustomerValidationService
CustomerSearchService
CustomerFilterService
CustomerSortService
CustomerNotificationService

Which one is easier to understand?

Usually the first.

Not because it has fewer files.

Because responsibilities are grouped intentionally.

Services Don’t Replace Architecture

Some responsibilities belong together.

Others don’t.

The question isn’t:

“Should this become another service?”

The better question is:

“Which architectural boundary owns this responsibility?”

That answer determines where the logic belongs.

Modern Angular Gives Better Options

Today’s Angular offers more choices than ever.

  • Signals
  • Signal Store
  • Facades
  • Standalone Components
  • Functional Providers
  • Effects

Not every piece of logic needs another injectable service.

Sometimes a computed signal is enough.

Sometimes a Facade is the right abstraction.

Sometimes the feature itself should own the workflow.

Think in Responsibilities

Instead of counting services, think in capabilities.

For example:

Customer Feature

  • Customer API
  • Customer State
  • Customer Workflow

Three clear responsibilities.

Not fifteen tiny services with overlapping concerns.

Architecture is about meaningful boundaries.

Not maximizing file count.

A Code Review Question

When reviewing a pull request, ask:

Why is this a new service?

Not:

Can Angular inject it?

The answer reveals whether the design is evolving intentionally or reacting to every new requirement.

Simplicity Wins

The best Angular projects I’ve worked on rarely had the most services.

They had the clearest responsibilities.

Developers always knew:

  • Who owns this logic?
  • Where should new code go?
  • Which feature is responsible?

That clarity matters far more than the number of files.

A Practical Rule

Before creating a new service, ask yourself:

  • Am I introducing a new responsibility?
  • Or am I avoiding improving an existing boundary?

If it’s the second answer…

Another service probably isn’t the solution.

Final Thoughts

Angular services are one of the framework’s greatest strengths.

But like every powerful tool, they can be overused.

Creating more services doesn’t automatically improve architecture.

Sometimes it simply spreads complexity across more files.

Great Angular applications aren’t built by maximizing services.

They’re built by designing clear boundaries.

Because boundaries make systems understandable.

And understandable systems scale.

[embed]When Does an Angular Feature Become Too Big? Most Angular Features Don’t Become Messy Overnightmedium.com

Connect with Me

If you enjoyed this post and would like to stay updated with more content like this, feel free to connect with me on social media:

Email: Email me on dipaksahirav@gmail.com for any questions, collaborations, or just to say hi!

I appreciate your support and look forward to connecting with you!


메타데이터
post_id
8375c4cc7e06
slug
why-most-angular-teams-create-too-many-services-and-too-few-boundaries-8375c4cc7e06
url
https://medium.com/angular-engineering/why-most-angular-teams-create-too-many-services-and-too-few-boundaries-8375c4cc7e06
canonical_url
https://medium.com/angular-engineering/why-most-angular-teams-create-too-many-services-and-too-few-boundaries-8375c4cc7e06
author_url
https://medium.com/@dipaksahirav
status
ok
fetched_at
2026-07-09 10:10:35