availableHyderabad, India
Hariom
Joshi
Cloud & Backend Engineer
- AWS
- CloudFormation
- ECS Fargate
- Lambda
- Docker
- GitHub Actions
- Python
- Java 17
- dsa.solved700+
- codechef4★
- prepsat.hackathonAIR 28 / 50,000+
- aws.certifiedCloud Practitioner
- claude.certifiedDeveloper
shipping for3 Years
About
$ cat engineer.yamlI own the AWS estate behind a COBOL-mainframe-to-cloud modernisation programme for a Fortune 500 US investment management client. Roughly 80% of the resource footprint across dev, UAT and production is mine to define — CloudFormation stacks, ECS Fargate services, Aurora and Redshift, DMS migrations and the GitHub Actions pipelines that ship them — alongside the Java 17 and Python services replacing the batch workloads we migrate off the mainframe.
Current engagement
Cloud modernisation programme for a Fortune 500 US investment management client — migrating COBOL mainframe batch workloads to Java and Python on AWS. 20-engineer engagement.
How I work
Infrastructure goes into a template before it goes into an account. Anything built with a console click has to be rebuilt with a console click at 3am, so it gets written down, reviewed, and shipped through the same pipeline as the application code.
apiVersion: engineer.dev/v1kind: CloudEngineermetadata: name: hariom-joshi location: "Hyderabad, India" region: ap-south-1spec: role: "Cloud & Backend Engineer" cloud-infrastructure: - AWS - CloudFormation - ECS Fargate devops-tooling: - GitHub Actions - Docker - Artifactory data: - Aurora - Redshift - PostgreSQL languages-backend: - Java 17 - Spring Boot - Pythonstatus: phase: Running since: 2023-07-01 replicas: 1 # does not scale horizontallyStack
$ terraform state listGrouped the way the account is. Everything on this list is something I have run in production — provisioned, broken and fixed. There is no aspirational tier.
- AWS
- CloudFormation
- ECS Fargate
- Lambda
- Step Functions
- S3
- IAM
- CloudWatch
- AWS DMS
- KMS
- VPC
- Storage Gateway
- Secrets Manager
- Glue
- GitHub Actions
- Docker
- Artifactory
- Bamboo
- Splunk
- Control-M
- ServiceNow
- Aurora
- Redshift
- PostgreSQL
- MySQL
- DB2
- Spring Data JPA
- Java 17
- Spring Boot
- Python
- SQL
- REST APIs
- Microservices
- Shell
- Maven
- JUnit
36 resources across 4 parts of the estate
Experience
$ git log --stat --prodWhere I have shipped, most recent first. The numbers lead, because they are what changed by my being there; the detail underneath is what backs them up.
Jan 2024 – Present · Hyderabad, India
Cloud modernisation programme for a Fortune 500 US investment management client — migrating COBOL mainframe batch workloads to Java and Python on AWS. 20-engineer engagement.
- of the AWS estate owneddev · uat · prod
- ~80%
- EC2 provisioning timedown from 15–20 min
- <2m
- records per peak runnightly batch jobs
- 500K
- Own ~80% of the AWS resource estate across dev, UAT and production — EC2, ECS Fargate, Lambda, S3, Aurora, Redshift, KMS, Secrets Manager, Step Functions and EFS — including least-privilege IAM policies, secrets rotation, and the S3 lifecycle rules that brought spend down.
- Cut EC2 provisioning from 15–20 minutes to under 2 minutes — around 90% — by profiling and removing non-essential userdata bootstrap commands, shortening every job-execution cycle in the environment.
- Authored and maintain 15–20 CloudFormation stacks that provision the whole environment, and 30–40 GitHub Actions pipelines publishing build artifacts to JFrog Artifactory.
- Built the Java 17 / Spring Boot services running on ECS Fargate and the Python services on Lambda behind batch jobs that process 200,000–500,000 customer records per peak run.
- Delivered an AWS Storage Gateway file share end to end for controlled external access to S3 objects — ServiceNow change requests, Active Directory group provisioning, SailPoint role design and the network configuration behind it.
- AWS
- CloudFormation
- ECS Fargate
- Lambda
- Aurora
- Redshift
- AWS DMS
- GitHub Actions
- Java 17
- Spring Boot
- Python
- Docker
Jan 2023 – Mar 2023 · Remote
Internal tooling for candidate assessment — a browser extension and the cloud APIs behind it.
- Built a Chrome extension with React and Node.js that automated candidate monitoring, removing the manual proctoring effort it replaced.
- Wrote the cloud interaction APIs behind it for real-time screen capture and secure storage.
- React
- Node.js
- REST APIs
Projects
$ gh repo list --sourceThings built outside the engagement, all of them public — the links go to the source, not to a screenshot.
aws-idle-resource-manager
Non-production AWS gets left running after the work ends, and nobody sees it until the bill does. Fixed start/stop schedules either stop something in use or save nothing, so this measures instead: every 30 minutes a Lambda reads real CloudWatch usage for each managed EC2 instance, Aurora cluster and RDS instance, warns the owner twice, and stops whatever is still idle. Terraform end to end, shipped through GitHub Actions over OIDC — no static AWS keys anywhere.
build plan4 / 8 landed
Next: idle-guard moduleLambda, DynamoDB, EventBridge, SQS, SES, SSM
- Terraform
- Python
- Lambda
- EventBridge
- DynamoDB
- CloudWatch
- SES
- GitHub Actions
- OIDC
design notes
design ruleEvery choice prefers missing an idle resource over stopping a busy one.
- one forgotten m5.xlargeper month, left running
- $145
- to run the guardper month · 6 resources, est.
- <$1
- static AWS keysOIDC · short-lived creds
- 0
escalation · per resource
WARNED_1T+0
Idle on every signal. First warning to the owner.
WARNED_2T+30m
Still idle. Urgent warning.
STOPPEDT+60m
Still idle. Stopped once dry run is off — never terminated.
Any activity on a later tick deletes the state row and the countdown starts over. Bringing a stopped resource back is always a human action.
- Design documentflow, data model, IAM, rollout, runbookdone
- GitHub → AWS OIDCtrust verified from CIdone
- Least-privilege IAMCI role policies + Lambda boundarydone
- Bootstrap TerraformS3 state bucket, native lockingdone
- idle-guard moduleLambda, DynamoDB, EventBridge, SQS, SES, SSMnext
- Evaluator + handlersEC2 · RDS · Auroraqueued
- Plan / apply workflowsapply approval-gated on mainqueued
- Dry-run weekthresholds from real logs, then enforcequeued
design decisions
- Missing metrics count as unknown, never as zero. A metric that isn't publishing comes back empty, and reading that as 0 is the likeliest way to stop a healthy database.
- Signals combine with AND, not OR. A jump host sits at 2% CPU while in use; a runaway process sits at 90% doing nothing.
- The Lambda's IAM policy names every managed ARN, so a logic bug can't reach anything else — and GitHub Actions only deploys, holding no permission to stop a thing.
- EventBridge delivers at least once, so reserved concurrency of 1 and a conditional write on status_since turn a duplicate tick into a no-op.
spender-guardian
AWS cost-visibility tooling: pulls spend per account and surfaces what moved, so a bill that jumps is traceable to the resource behind it rather than to a monthly total.
- Java
- Docker
- GitHub Actions
- AWS
infant-emotion-detection
Real-time emotion detection over audio and image input using a CNN, reaching 97% classification accuracy, with REST APIs triggering downstream actions on detected state.
- Python
- CNN
- REST APIs
Contact
$ curl -X POST /engagementsI am mid-programme on a migration I own, so I read more than I reply to. If the estate on your side needs someone to answer for it, that is worth a message — and it will get one.
Primary
hariomjoshi331@gmail.comWorth a message
- An AWS estate that needs an owner rather than a ticket queue.
- Migration or modernisation work with real constraints attached.
- A team that ships infrastructure through review, not through the console.
- Based
- Hyderabad, India
- Region
- ap-south-1
POST /engagements HTTP/1.1
Host: hariomjoshi.dev
Content-Type: text/plain
Expect: 200 within 24h