MV Michael van Leest AI, cloud, and platform engineering
Home Blog About Contact

Blog post

AWS mistakes small teams make in their first year

A practical guide to the most common AWS mistakes small teams make in their first year, including IAM, environments, observability, cost visibility, networking, and choosing too much infrastructure too soon.

Most small teams do not get AWS wrong because they lack access to best practices. They get it wrong because they make understandable decisions under delivery pressure.

The problem is that early AWS decisions tend to last longer than teams expect. A quick shortcut around IAM, environments, deployments, or observability often survives long enough to become part of the operating model.

That is why the first year on AWS matters so much. It is the period where teams are usually moving fast, still learning the shape of the product, and making infrastructure choices that will either keep delivery clear or quietly slow it down later.

These are the mistakes I see most often.

1. Treating IAM as a problem to solve later

Small teams often leave IAM in a rough early state because it feels easier to get the system working first and tighten permissions later.

That usually looks like:

  • broad human access to production
  • shared credentials or unclear role usage
  • service permissions expanded until deployment errors stop
  • weak separation between environments

This is a mistake for obvious security reasons, but also for delivery reasons. Teams move more confidently when access boundaries are understandable. If nobody is really sure who can change what, production changes get slower and riskier.

I do not expect perfect least privilege immediately. I do expect the access model to be explainable.

2. Creating AWS environments that do not behave the same way

Small teams usually know they need multiple environments. The mistake is assuming that having them is enough.

An environment strategy only helps if the environments are close enough in behavior that teams can trust what they learn before production.

Problems start when:

  • staging is missing key integrations
  • secrets are managed differently across environments
  • infrastructure is only partly mirrored
  • deployment paths differ more than people realize

At that point, non-production environments stop reducing risk and start creating false confidence.

3. Choosing a more complex AWS runtime model than the workload needs

This is one of the most common AWS mistakes in early systems.

Teams choose a platform that looks mature instead of one that matches the workload and the team they actually have. They pick containers too early, or jump toward Kubernetes, or build a more elaborate deployment model before the product has earned it.

My bias is still to start simpler. For many small teams, that means using AWS Lambda first when the workload fits, and keeping infrastructure close to the application with something like SST instead of building a heavier platform story too early.

The mistake is not using advanced tooling. The mistake is carrying advanced operational overhead before it solves a real problem.

4. Letting AWS console changes become part of the operating model

Nearly every AWS team uses the console. That is not the problem.

The problem starts when the console becomes the place where the real infrastructure lives.

That usually leads to:

  • undocumented changes
  • drift between code and reality
  • deployment behavior that is hard to explain
  • outages that are harder to diagnose because the environment is no longer fully visible in code

For small teams, this gets expensive quickly. The fewer people there are, the more important it is that infrastructure stays legible and reviewable.

5. Pushing AWS networking complexity too early

Networking matters, but many small teams make it harder than it needs to be in the first year.

They introduce more VPC structure, segmentation, routing rules, or service-to-service complexity than the actual system requires. Usually that comes from copying a pattern designed for a very different scale.

I am not arguing against good boundaries. I am arguing against unnecessary boundary complexity before the team has a strong operational reason for it.

If networking becomes hard to explain, hard to debug, or easy to misconfigure, it is already costing the team more than it should.

6. Waiting too long to make observability useful

Many teams think observability is something they can improve once the product is more stable. In practice, the first unstable period is exactly when they need it most.

What small teams usually need first is not a giant telemetry stack. They need a system that helps them answer practical questions quickly:

  • what failed?
  • where did it fail?
  • who owns it?
  • is this isolated or systemic?
  • what changed recently?

Without that, every incident takes longer, every deployment feels riskier, and every production issue depends too much on memory and guesswork.

7. Ignoring AWS cost visibility until it becomes painful

AWS cost visibility is usually underbuilt in the first year because teams are focused on product delivery. That is understandable, but it creates a predictable problem: the AWS bill becomes interesting only after it becomes uncomfortable.

The best time to make costs visible is before anybody is worried.

That does not require finance-grade allocation. It usually requires:

  • enough tagging or structure to separate environments and major workloads
  • visibility into the services driving spend
  • a habit of connecting cost changes to technical decisions

If teams do this early, architecture tradeoffs stay grounded. If they do it late, cost becomes a reactive cleanup problem.

8. Building too much internal platform too soon

This is a quieter AWS mistake, but it shows up a lot.

Small teams discover repeated friction and correctly decide they need some shared infrastructure patterns. Then they over-respond by creating internal abstractions, too many supported paths, or a mini platform team before the basics are even stable.

The right answer is usually much smaller:

  • one clear deployment path
  • one sane default per service type
  • infrastructure as code that stays understandable
  • enough operational visibility to support production work

If the platform story becomes its own product too early, it starts competing with the product the team is actually trying to build.

9. Depending too much on one person’s AWS knowledge

This is one of the clearest warning signs in an early AWS environment.

If one person knows how deployments really work, how secrets are managed, why the IAM model looks the way it does, and which changes are safe in production, the team does not have an AWS foundation yet. It has a human dependency.

That risk often hides for a while because things keep moving. It becomes obvious only during incidents, handovers, or time pressure.

The first year is the right time to reduce that dependency by making infrastructure clearer, codified, and easier to explain.

What I would do instead in the first year on AWS

If I were helping a small team in its first year on AWS, my default priorities would be:

  1. make IAM understandable and role-based
  2. keep environments consistent enough to trust them
  3. choose the simplest runtime model that fits the workload
  4. keep infrastructure in code instead of in console memory
  5. make observability useful before incidents force the issue
  6. expose cost signals early enough to influence decisions
  7. reduce hidden knowledge before it becomes operational risk

That is not everything a team could improve. It is the set of things that most often determines whether AWS stays a helpful delivery platform or turns into a source of drag.

My default advice for the first year on AWS

Small teams do not need perfect cloud architecture in year one. They do need a cloud setup they can understand, change safely, and operate without too much ceremony.

That usually means resisting the urge to copy a larger company’s platform model too early. It means choosing clarity over theoretical completeness. It also means treating IAM, observability, environments, and cost visibility as part of product delivery, not as cleanup work for later.

The teams that do this well are not the ones with the most sophisticated AWS setup. They are the ones whose setup still makes sense once real delivery pressure starts.

Contact

Working on AI, cloud, or platform modernization?

If you are hiring, shaping a project, or need an experienced technical sounding board, use the contact form and send a little context.