Sandro Volpicella

Sandro Volpicella

@sandrovolpicella.com

I teach developers about the cloud โ›… ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ป Platform Lead @hashnode ๐Ÿ“• New Book: https://cloudwatchbook.com โ›… AWS Fundamentals Book: https://awsfundamentals.com ๐Ÿ˜ผ Builds https://kitlytics.com ๐Ÿค— AWS Community Builder

822 followers100 following551 posts

Is there anything worse than onboarding a new dev with an outdated diagram? You spend 20 minutes explaining "oh ignore that box, we deleted that last year". It is confusing and inefficient. We found a better way using Kiro. It scans your live AWS environment.

I refuse to spend another Friday afternoon in Drawio. Documentation is important. But manual documentation is painful. We have been experimenting with MCP servers and AI to solve this. The tool connects directly to your infrastructure. It reads your Terraform or CDK.

I've been running centralized logging for our AWS accounts. CloudWatch log centralization has two gotchas that caught me off guard. Gotcha #1: Settings Don't Transfer ๐Ÿšจ Log Group settings get stripped during the copy. Retention policies? Gone. Data protection policies? Gone.

View full thread

Gotcha #2: Hard to Know Which Account Logs Come From ๐Ÿค” Log Group names don't show source accounts. You can't tell which logs came from where in the console. Solution: Use the @aws.account and @aws.region fields in Logs Insights. These fields are indexed, so no extra query costs.

I've been running centralized logging for our AWS accounts. CloudWatch log centralization has two gotchas that caught me off guard. Gotcha #1: Settings Don't Transfer ๐Ÿšจ Log Group settings get stripped during the copy. Retention policies? Gone. Data protection policies? Gone.

This seems obvious from the docs, but it means you need a strategy. My approach: โ€ข Source accounts: 30-day retention โ€ข Central account: 1-year retention (for SOC2/ISO27001) I handle this with a Lambda CRON job that applies retention and data protection policies to new Log Groups.

Your architecture diagram is lying to you. It was probably correct on day one. But then you added a Lambda function. Changed a DynamoDB index. And forgot to update the doc. We all do this. That is why we started using AI to fix it.

By connecting Kiro to our AWS account, we generate maps from ๐ซ๐ž๐š๐ฅ๐ข๐ญ๐ฒ. If the code changes, the map updates. We show exactly how to set this up in our new video. Watch it here www.youtube.com/watch?v=0Hs...

youtube.comWhy Kiro Just Killed Manual AWS DiagramsStop wasting hours dragging icons in a "dumb" canvas. Manual diagrams are officially dead.In this video, I show you how to move from manual tools like Drawio...

Supply chain attacks are rising. And your `node_modules` folder is the perfect target. OWASP dropped their Top 10 for NPM security. It's a wake-up call for many of us. I summarized the key points you need to know. ๐Ÿ. ๐ƒ๐จ๐ง'๐ญ ๐ญ๐ซ๐ฎ๐ฌ๐ญ ๐ฌ๐œ๐ซ๐ข๐ฉ๐ญ๐ฌ

View full thread

๐Ÿ“. ๐€๐ฎ๐๐ข๐ญ ๐ฒ๐จ๐ฎ๐ซ ๐๐ž๐ฉ๐ฌ `npm audit` is free. Run it in your CI. Fail the build if there are critical issues. ๐Ÿ”. ๐”๐ฌ๐ž ๐š ๐ฉ๐ซ๐จ๐ฑ๐ฒ Tools like Verdaccio let you cache and scan packages before they hit your developer's machines.

Supply chain attacks are rising. And your `node_modules` folder is the perfect target. OWASP dropped their Top 10 for NPM security. It's a wake-up call for many of us. I summarized the key points you need to know. ๐Ÿ. ๐ƒ๐จ๐ง'๐ญ ๐ญ๐ซ๐ฎ๐ฌ๐ญ ๐ฌ๐œ๐ซ๐ข๐ฉ๐ญ๐ฌ

`npm install` runs scripts by default. This is how malware gets in. Use `--ignore-scripts` to be safe. ๐Ÿ. ๐‹๐จ๐œ๐ค๐Ÿ๐ข๐ฅ๐ž๐ฌ ๐š๐ซ๐ž ๐ฆ๐š๐ง๐๐š๐ญ๐จ๐ซ๐ฒ If you don't use `npm ci`, you are installing different versions than your team. That breaks things. And it opens security holes.

๐Ÿ‘. ๐Ÿ๐…๐€ ๐ข๐ฌ ๐ง๐จ๐ญ ๐จ๐ฉ๐ญ๐ข๐จ๐ง๐š๐ฅ If you maintain a package, enable 2FA. Attackers target maintainers to inject malicious code. ๐Ÿ’. ๐’๐ž๐œ๐ซ๐ž๐ญ๐ฌ ๐๐จ๐ง'๐ญ ๐›๐ž๐ฅ๐จ๐ง๐  ๐ข๐ง ๐๐๐Œ I've seen API keys in published packages too often. Use `.npmignore` to whitelist what you publish.

Stop dragging boxes around in Drawio. Seriously. It is 2026. We should have ๐š๐ฎ๐ญ๐จ๐ฆ๐š๐ญ๐ž๐ this years ago. We recorded a video showing how to use AI to generate your AWS diagrams. It pulls data right from your ๐ฅ๐ข๐ฏ๐ž ๐ž๐ง๐ฏ๐ข๐ซ๐จ๐ง๐ฆ๐ž๐ง๐ญ.

Stop using ๐’๐Ÿ‘ ๐’๐ญ๐š๐ง๐๐š๐ซ๐ as your default storage class. Unless you know exactly how your data will be accessed, you are likely overpaying. I used to default to Standard for everything. Then I looked at our bill.

View full thread

It is available instantly. No retrieval fees. No restoration time. You literally get the savings of Glacier with the experience of S3 Standard. โš ๏ธ ๐“๐ก๐ž ๐จ๐ง๐ฅ๐ฒ ๐œ๐š๐ฏ๐ž๐š๐ญ๐ฌ: 1. Files smaller than 128KB don't get moved (but you still pay the monitoring fee).

Stop using ๐’๐Ÿ‘ ๐’๐ญ๐š๐ง๐๐š๐ซ๐ as your default storage class. Unless you know exactly how your data will be accessed, you are likely overpaying. I used to default to Standard for everything. Then I looked at our bill.

We were paying for instant access to logs and backups that no one had touched in a year. Now, I use ๐’๐Ÿ‘ ๐ˆ๐ง๐ญ๐ž๐ฅ๐ฅ๐ข๐ ๐ž๐ง๐ญ-๐“๐ข๐ž๐ซ๐ข๐ง๐  for almost everything. The concept is simple: AWS monitors the objects for you.

If you don't touch a file, it moves it to a cheaper tier automatically. The savings add up fast: โ€ข 30 days of no access? Moves to Infrequent Access (Save ~40%) โ€ข 90 days of no access? Moves to Archive Instant Access (Save ~68%) And if you need the file back?

Everyone tells you to move old data to Glacier to save money. But they usually forget to mention the pain. โ€ข Retrieval fees hurt. โ€ข Waiting 5-12 hours for data sucks. That is why I prefer ๐’๐Ÿ‘ ๐ˆ๐ง๐ญ๐ž๐ฅ๐ฅ๐ข๐ ๐ž๐ง๐ญ-๐“๐ข๐ž๐ซ๐ข๐ง๐ . It solves the biggest problem with archiving:

View full thread

If you suddenly need to read that file? It opens instantly. And you pay ๐™๐ž๐ซ๐จ retrieval fees. This is the killer feature. With standard Glacier, reading your own backup is a hassle. With Intelligent Tiering, you don't even notice it happened. The only time I don't use it?

Everyone tells you to move old data to Glacier to save money. But they usually forget to mention the pain. โ€ข Retrieval fees hurt. โ€ข Waiting 5-12 hours for data sucks. That is why I prefer ๐’๐Ÿ‘ ๐ˆ๐ง๐ญ๐ž๐ฅ๐ฅ๐ข๐ ๐ž๐ง๐ญ-๐“๐ข๐ž๐ซ๐ข๐ง๐ . It solves the biggest problem with archiving:

The fear of needing the data back. Here is why it is different: You get the cost savings of archive storage, but the performance of S3 Standard. If your data sits there for 90 days? AWS moves it to the Archive Instant Access tier. You save ~68% on storage.

We pull in thousands of dependencies. We trust them blindly. That is a mistake. ๐Ÿ’ฃ OWASP just released their top 10 security practices for NPM. I went through them so you don't have to. Here is what you need to change in your workflow:

View full thread

8. ๐“๐ฎ๐ซ๐ง ๐จ๐ง ๐Ÿ๐…๐€. This should be non-negotiable for every maintainer. 9. ๐”๐ฌ๐ž ๐ ๐ซ๐š๐ง๐ฎ๐ฅ๐š๐ซ ๐ญ๐จ๐ค๐ž๐ง๐ฌ. Don't use your personal token for CI/CD. Use automation tokens. 10. ๐–๐š๐ญ๐œ๐ก ๐จ๐ฎ๐ญ ๐Ÿ๐จ๐ซ ๐ญ๐ฒ๐ฉ๐จ๐ฌ. `react` is not `rceact`. Typosquatting is real.

We pull in thousands of dependencies. We trust them blindly. That is a mistake. ๐Ÿ’ฃ OWASP just released their top 10 security practices for NPM. I went through them so you don't have to. Here is what you need to change in your workflow:

View full thread

4. ๐‚๐ก๐ž๐œ๐ค ๐ฒ๐จ๐ฎ๐ซ ๐ฉ๐ซ๐จ๐ฃ๐ž๐œ๐ญ ๐ก๐ž๐š๐ฅ๐ญ๐ก. `npm outdated` and `npm doctor` are built-in tools. Use them. 5. ๐’๐œ๐š๐ง ๐Ÿ๐จ๐ซ ๐ฏ๐ฎ๐ฅ๐ง๐ž๐ซ๐š๐›๐ข๐ฅ๐ข๐ญ๐ข๐ž๐ฌ. Make `npm audit` part of your CI pipeline.

6. ๐๐ซ๐จ๐ญ๐ž๐œ๐ญ ๐ฒ๐จ๐ฎ๐ซ ๐ฌ๐ฎ๐ฉ๐ฉ๐ฅ๐ฒ ๐œ๐ก๐š๐ข๐ง. Consider a local proxy like Verdaccio to control what comes in. 7. ๐ƒ๐จ๐ง'๐ญ ๐ฅ๐ž๐š๐ค ๐ฏ๐ฎ๐ฅ๐ง๐ž๐ซ๐š๐›๐ข๐ฅ๐ข๐ญ๐ข๐ž๐ฌ. If you find a bug, report it privately. Don't put it on Twitter.

We pull in thousands of dependencies. We trust them blindly. That is a mistake. ๐Ÿ’ฃ OWASP just released their top 10 security practices for NPM. I went through them so you don't have to. Here is what you need to change in your workflow:

1. ๐’๐ญ๐จ๐ฉ ๐ฉ๐ฎ๐›๐ฅ๐ข๐ฌ๐ก๐ข๐ง๐  ๐ฌ๐ž๐œ๐ซ๐ž๐ญ๐ฌ. It happens faster than you think. Use `.npmignore` and always dry-run before publishing.

2. ๐‹๐จ๐œ๐ค ๐ฒ๐จ๐ฎ๐ซ ๐๐ž๐ฉ๐ž๐ง๐๐ž๐ง๐œ๐ข๐ž๐ฌ. Don't just install. Use `npm ci` or `yarn install --frozen-lockfile` to ensure everyone uses the exact same version. 3. ๐๐ฅ๐จ๐œ๐ค ๐ฆ๐š๐ฅ๐ข๐œ๐ข๐จ๐ฎ๐ฌ ๐ฌ๐œ๐ซ๐ข๐ฉ๐ญ๐ฌ. Attackers love post-install hooks. Add `--ignore-scripts` to your install commands.

Sometimes you need to give frontend developers the ability to choose their own data. And if you want to build that in a serverless way you need to use AppSync! We have all been there. The frontend asks for one more field. The backend team puts it on the backlog.

View full thread

You can cache specific fields or full queries. No need to spin up a separate Redis instance. ๐Ÿ” ๐…๐ข๐ง๐ž-๐†๐ซ๐š๐ข๐ง๐ž๐ ๐€๐œ๐œ๐ž๐ฌ๐ฌ Control who sees what. You can use @auth directives to lock down specific fields based on user groups. ๐Ÿ“ฑ ๐Ž๐Ÿ๐Ÿ๐ฅ๐ข๐ง๐ž ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ

Sometimes you need to give frontend developers the ability to choose their own data. And if you want to build that in a serverless way you need to use AppSync! We have all been there. The frontend asks for one more field. The backend team puts it on the backlog.

Two weeks later, the endpoint is updated. ๐Ÿข This friction kills velocity. AppSync removes the bottleneck entirely. It lets the frontend query exactly what they need, when they need it. Here is why developers love it ๐Ÿ› ๏ธ ๐๐ฎ๐ข๐ฅ๐ญ-๐ข๐ง ๐‚๐š๐œ๐ก๐ข๐ง๐ 

My current claude-code workflow: 1. cc (alias for alias cc='claude --dangerously-skip-permissions') 2. /spec <idea of the feature> - give all context needed, interviews me with all important things, lots of depth. 3. Specfile is created in Markdown (not JSON/YML -> MD)

View full thread

In the /spec command & CLAUDE MD I often define how the feedback process looks like. Sometimes I also add it to the spec (e.g. check abc in the DB or deploy and build it until this works). I LOVE that ๐Ÿฅฐ

My current claude-code workflow: 1. cc (alias for alias cc='claude --dangerously-skip-permissions') 2. /spec <idea of the feature> - give all context needed, interviews me with all important things, lots of depth. 3. Specfile is created in Markdown (not JSON/YML -> MD)

4. I read it, sometimes but rarely need to update it - copy path 5. /clear 6. Implement spec now Currently, I don't use any ralph loop because this workflow works insanely good for me. I only do this for whole features or fixes where I'm not sure about the issues.

One nugget I really took from the podcast of Steinberger & Friedman is this prompt: With everything you have seen right now, is there anything to improve. In the image is the exact prompt I'm using and I really like the results.

It just makes the work with an agent more natural like I would work with a colleague as well. e.g.: "hey I implemented the /me api but saw that we are mixing business logic from the API package which should be in the core package, should I refactor that?"