Pushpjeet Cholkar

Blog

Sunday Reflection: Automation, Asking for Help Sooner, and Airflow Dynamic Task Mapping

May 3, 2026 · Pushpjeet Cholkar

Every Sunday I take 15 minutes to look back at the week — not to celebrate wins or beat myself up over mistakes, but to actually learn from both. I ask myself the same four questions: What went well? What would I do differently? What did I actually learn? What am I carrying into next week?

It’s a simple habit. But it’s changed how I grow as a data engineer more than any course or tutorial ever has. This week was a mix of small victories and honest face-palm moments. Here’s this week’s honest answer to each question.

What Went Well: Automating the Unglamorous Stuff

Mid-week I finally automated a messy data ingestion job that I’d been running manually for months. Nothing fancy — a Python script wrapped in an Airflow DAG, pulling from an SFTP server, applying some transformations, and landing the data in BigQuery. It now runs on a schedule, logs its own errors, and sends an alert if something looks wrong.

But it saved 2 hours of manual work per day. That’s 10 hours a week. Over a year, that’s 500+ hours given back to the team.

The lesson: the automation you keep putting off is almost always worth it. The boring automations often have the highest ROI. If you have a manual task that happens daily or weekly — that’s your first automation target.

What I’d Do Differently: Ask for Help Sooner

I spent nearly four hours this week debugging a dbt model that was failing with a cryptic error, staring at YAML and SQL. Finally I described the problem in a Slack message to a teammate. The reply came within minutes, with the exact fix.

Four hours of solo suffering. A few minutes with a teammate. Same result.

Asking for help is not a weakness. It’s engineering. The cost of asking is almost always lower than we think. So next week: if I’m stuck for more than 30 minutes on something that someone on my team might know, I’m asking. Full stop.

What Finally Clicked: Airflow Dynamic Task Mapping

This week I finally made peace with Airflow’s dynamic task mapping — a feature that’s been in Airflow 2.3+ for a while but that I’d been avoiding because the syntax looked intimidating.

The idea: instead of defining a fixed number of tasks at DAG write time, you let the number of tasks be determined at runtime based on your data. The key: .expand() creates one task instance per item in the list automatically.

from airflow.decorators import dag, task
from datetime import datetime

@dag(start_date=datetime(2026, 1, 1), schedule="@daily")
def dynamic_pipeline():

    @task
    def get_files() -> list:
        return ["file_a.csv", "file_b.csv", "file_c.csv"]

    @task
    def process_file(filename: str):
        print(f"Processing {filename}")

    files = get_files()
    process_file.expand(filename=files)  # Creates one task per file

dynamic_pipeline()

On a real pipeline, instead of hardcoding 12 parallel tasks for 12 data sources, I mapped a single task over a list — and Airflow handled the fan-out automatically. The DAG went from 80 lines to 30.

# Before: hardcoded tasks
process_source_a = PythonOperator(task_id='process_a', ...)
process_source_b = PythonOperator(task_id='process_b', ...)

# After: dynamic mapping
process_sources = PythonOperator.partial(
    task_id='process_source',
    python_callable=process_fn
).expand(op_args=get_source_list())

Some tools look harder than they are. Sometimes the barrier is just the willingness to read the documentation carefully instead of skimming for a quick answer.

The Theme of the Week: Collaboration Over Heroics

The best moment of this week wasn’t debugging a pipeline or shipping a feature. It was a 15-minute call with a teammate who’d seen a similar problem before. In 15 minutes, we covered what would have taken me another 2 hours alone.

Almost everything good this week came from using other people’s knowledge, patterns, or experience. Solo heroics are satisfying in the moment, but the team is a resource — not a last resort. That’s the compounding return on collaboration.

What I’m Carrying Into Next Week

The Habit Behind the Reflection

If you don’t already do a weekly reflection, try it — even just 10 minutes on a Sunday. Four questions: What went well? What would I do differently? What did I learn? What’s my intention for next week?

Growth as an engineer isn’t just about learning new tools. It’s about getting better at learning itself.


If you’re a data engineer reading this on a Sunday: what’s your biggest lesson from the week? Drop it in the comments.

— Pushpjeet Cholkar, Data Engineer

Newsletter

Enjoyed this post?

Get new posts, AI/ML tutorials, AWS batch dates and Oracle tips by email. No spam, unsubscribe anytime.

I’m interested in

Double opt-in: you’ll get a confirmation email first.