<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/btcqxnjn7" -->

---
title: Software Architecture for ETLs | daily.dev
description: A simple software architecture pattern for ETL applications organizes code into three main packages: input (reading from external sources), output (writing to...
canonical: https://daily.dev/posts/btcqxnjn7
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Software Architecture for ETLs | daily.dev
og:description: A simple software architecture pattern for ETL applications organizes code into three main packages: input (reading from external sources), output (writing to...
og:url: https://daily.dev/posts/btcqxnjn7
og:image: https://api.daily.dev/og/posts/BtcQxNJN7.png
og:image:alt: Post cover image
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Software Architecture for ETLs

**[Deep.Dev](https://daily.dev/sources/deepdev)** · [@noyrada](https://daily.dev/noyrada) · 0 upvotes · 0 comments

## Summary

A simple software architecture pattern for ETL applications organizes code into three main packages: input (reading from external sources), output (writing to external destinations), and use case (orchestrating business logic). Each input/output package should have sub-packages per technology to maintain encapsulation. When dealing with multiple data sources, organize by domain rather than by API or technology. In AWS Step Functions, separate Lambda functions should handle each domain, with AWS Lambda layers enabling code reuse across functions.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://newsletter.optimistengineer.com/p/software-architecture-for-etls>

## Similar posts on daily.dev

- [Don’t just attend KubeCon \+ CloudNativeCon, Merge Forward your experience\!](https://daily.dev/posts/don-t-just-attend-kubecon-cloudnativecon-merge-forward-your-experience--l0rpp73x8) · CNCF · 1 upvotes · 0 comments
- [Announcing H2 2026 KCDs](https://daily.dev/posts/announcing-h2-2026-kcds-m96goajm1) · CNCF · 1 upvotes · 0 comments
- [Two months of Open Community Groups](https://daily.dev/posts/two-months-of-open-community-groups-asf52zhbs) · CNCF · 0 upvotes · 0 comments
- [CNCF Unveils Schedule for KubeCon \+ CloudNativeCon Europe 2026](https://daily.dev/posts/cncf-unveils-schedule-for-kubecon-cloudnativecon-europe-2026-ikhcoa5cb) · CNCF · 2 upvotes · 0 comments
- [CNCF Debuts KubeCon \+ CloudNativeCon Japan 2026 Schedule](https://daily.dev/posts/cncf-debuts-kubecon-cloudnativecon-japan-2026-schedule-xp5pyudub) · CNCF · 1 upvotes · 0 comments

---

Tags: [#aws](https://daily.dev/tags/aws), [#architecture](https://daily.dev/tags/architecture), [#serverless](https://daily.dev/tags/serverless), [#aws-lambda](https://daily.dev/tags/aws-lambda), [#etl](https://daily.dev/tags/etl)

[View this post on daily.dev](https://daily.dev/posts/btcqxnjn7)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"DiscussionForumPosting","mainEntityOfPage":"https://daily.dev/posts/btcqxnjn7","headline":"Software Architecture for ETLs","text":"Shared: Software Architecture for ETLs","url":"https://daily.dev/posts/btcqxnjn7","datePublished":"2026-01-23T01:48:43.036Z","dateModified":"2026-01-23T01:48:43.038Z","author":{"@type":"Person","name":"Noy Rada","url":"https://daily.dev/noyrada","image":"https://media.daily.dev/image/upload/s--OsuhCwx9--/f_auto/v1764342474/avatars/avatar_GpqVrWmdEakRvO9rmdqz9?_a=BAMAK+ZW0","description":"Software Engineer","interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"EndorseAction"},"userInteractionCount":20}},"image":"https://media.daily.dev/image/upload/s--0_ODbtD2--/f_auto/v1722860399/public/Placeholder%2008","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"sharedContent":{"@type":"WebPage","url":"https://api.daily.dev/r/EayOc8q5k"},"isPartOf":{"@type":"WebPage","url":"https://daily.dev/squads/deepdev","name":"Deep.Dev"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Deep.Dev","item":"https://daily.dev/squads/deepdev"},{"@type":"ListItem","position":3,"name":"Software Architecture for ETLs"}]}
```

