Your Dev Environment Doesn’t Need to Work Nights
Your dev environment doesn’t need to run 24/7. Here’s how to schedule AWS databases and compute after hours, and what to watch for.
Patrick · Founder of CloudBudgie
5 min read

It's 2 AM. Your dev environment is up and running. Nobody is using it.
For a lot of teams, that's just the default. Spin it up, leave it on, move on to the next thing. It's convenient. But your dev and test environments don't need production-style, around-the-clock availability.
Off-hours scheduling asks one simple question: when does this environment actually need to be running? For most dev environments, the answer is easy: tuck them in at 6, wake them up at 9.
Development infrastructure shouldn't need an overnight shift.
Start with the working schedule
Say your dev environment is used from 9 AM to 6 PM, Monday through Friday. That's 45 hours out of a 168-hour week. In this example, it sits outside its schedule for 123 hours, about 73% of the week.
- Mon9 AM–6 PM
- Tue9 AM–6 PM
- Wed9 AM–6 PM
- Thu9 AM–6 PM
- Fri9 AM–6 PM
- SatStopped all day
- SunStopped all day
Can keep billing all week
- EBS volumes
- Snapshots and backups
- Elastic IP addresses
- Database storage
To be clear, that is not 73% off your AWS bill. It's the share of runtime you could remove from the resources you schedule. What you actually save depends on how each service bills while it's stopped, whether Reserved Instances or Savings Plans already cover that usage, how long things take to start, and everything else in the account that keeps running.
The best place to start is anything with predictable hours: dev databases, internal test systems, and staging environments that are only used during the workday.
Find out what can safely stop
Before you schedule anything, talk to the people who own and use the environment. Ask about:
- overnight CI pipelines and scheduled data jobs
- backups and maintenance windows
- teammates in other time zones
- on-call engineers who might need to debug at night
- integrations that assume a service is always reachable
Then check what each resource can actually do. Not every AWS service has a stop button, and the ones that do behave differently:
- EC2 instances stop compute billing while stopped, but attached EBS volumes keep billing, and so do Elastic IP addresses. An instance without an Elastic IP gets a new public IPv4 address when it starts again.
- RDS DB instances and Aurora clusters can be stopped for up to seven days at a time. After that, AWS starts them automatically. Some setups, like read replicas, can't be stopped at all. Storage and backups keep billing.
- Redshift clusters can be paused and resumed, and storage keeps billing while they're paused.
- Auto Scaling groups can be scaled to zero. That terminates the instances, so anything stored on them is gone when new ones launch.
An off-hours schedule should be a deliberate decision, not a blind timer.
Know what keeps costing money
Stopping compute cuts compute charges for the hours it's off. It doesn't touch the cost of storage, snapshots, backups, Elastic IP addresses, load balancers, NAT gateways, or monitoring that stays in place.
So treat any runtime estimate as an estimate for the resources you schedule, not a promise about your whole bill. Track the scheduled resources' compute charges separately from everything else, and you'll see exactly what the schedule changed.
Time zones and exceptions are part of the plan
A simple schedule can trip up when your team spans time zones, or when daylight saving time shifts everyone's working hours.
Pick one clearly defined time zone for each schedule. Plan for holidays, release nights, and the occasional late evening. Decide up front how someone starts an environment outside its window, and who can change the schedule.
People also need to see what's going on. Owners should be able to tell why an environment is stopped, when it'll start again, and whether the last stop or start failed.
Start small and measure
- Pick one low-risk environment, and write down its current cost and how it's actually used.
- Confirm who owns it and what depends on it.
- Set a conservative schedule, tell the team, and test both stopping and starting.
- Watch for anything that breaks, and track the scheduled resources' charges against everything else.
- Adjust as usage changes, then roll it out to other nonproduction environments.
The safest cost optimization is the one your team can explain, schedule, and reverse.
Ways to do it
You don't need a product to get started. AWS gives you a few building blocks:
- Instance Scheduler on AWS, an AWS solution that starts and stops EC2 and RDS resources on schedules you define.
- Amazon EventBridge Scheduler, which can call AWS APIs like
StopInstancesandStartInstanceson a cron schedule. - Scheduled actions for Auto Scaling groups and Redshift clusters, built right into those services.
Whichever you pick, keep the schedule in one place, ideally next to the rest of your infrastructure code, so it gets reviewed and versioned like any other change.
Where CloudBudgie fits
CloudBudgie's Off-Hours Mode stops or pauses supported resources outside working hours and starts them again automatically. Today that covers RDS DB instances, Aurora clusters, Redshift clusters, DocumentDB and Neptune clusters, and Auto Scaling groups, which scale to zero. You choose the resources and the hours. You see the estimated monthly savings before you confirm. If a scheduled stop or start fails, you see the error on the resource, and you can edit or remove a schedule any time.
I'll be honest about what it doesn't do. Not every cloud service can be switched off. NAT gateways and many cache services have no stop operation, so saving money on them means deleting and recreating them. That's a different kind of change, and Off-Hours Mode doesn't do it.
The idea is simple: match your infrastructure to when it's actually used, keep the schedule easy to understand, and keep your team in control.
References
- Stop and start Amazon EC2 instances
- Stopping an Amazon RDS DB instance temporarily
- Stopping and starting an Amazon Aurora DB cluster
- Pausing and resuming Amazon Redshift clusters
- Scheduled scaling for Amazon EC2 Auto Scaling
- Instance Scheduler on AWS
- Amazon EventBridge Scheduler
- AWS public IPv4 address charge

