Work

Hi there 👋 My name is Taha. Here I write about work, plus some broader stuff at the end. If we haven’t met yet, I hope this gives you a quick proxy for my skills and experience.

Current Terminal Goal:

I want to help humanity build AGI. I think we can build one. It’s super worth it to build one. We can all chill and be unique humans afterwards. That’s the world I want to live in. And not a world bounded by fear, shame, guilt and lack of agency as a recurring pattern of human experience.

People grow up playing games with each other and see others defect. It makes the brain overfit on those data points to believe that “kill consume multiply conquer” is an inherent quality of the territory – because that’s the loss function of evolution or something along those lines. It’s easy to be stuck in the bounds of a model of reality like that and really suffer. And totally miss out on the possibilities that emerge and manifest once you try a bit harder.

Things like software, language, thrust of stories from mythology, and structulism is creating this awesome playground for us to have a blast by being playful and explorative. It’s opening up a safe space to play, and robust patterns of meaning in the nebulosity of emptiness. Isn’t that all worth working past flincing away, and walking into the unknown?

< Focus />

I build data products — for the most part as an engineer, doing napkin math, designing large pipelines with lots of components, and coding robust and scalable things. But I wear my PM hat too here and there, which has helped with delivering useful things, bending risk, and asking for help.

Sabbatical ⚓️ (2023-09 to now)

(I am open to opportunities for ml related contract/full-time jobs at seed to growth stage startups, but I’m a bit slower to respond at the moment if you’re reaching out)

I’m taking a long break. Planning for up to 6 months, but I will stay open to start sprinting again if I feel motivated by a project. So far I’ve been broadly exploring lots of interests. Not making any bets yet. I will write about my Explore/Exploit plans soon. The general theme is that OODA loop is more important than ever at the moment.

[Flinks raised a $103M series B]

Continue running our data at Flinks ( Data warehouse and most data pipelines ), as well as our MLOps now, supporting the DS team flinks.com/attributes – Two recent tangible projects:

1) Migration of our ML pipelines from AWS to GCP (SageMaker to VertexAI)

2) Led development of our largest ML pipeline, ingesting billions of banking transactions close-to-realtime, generating predictions using 6 different ML models in a sequence, and reliable delivery of the aggregated results to client facing dashboards (team effort of 9 engineers and data scientists )

Tools:

General tools: Python, Bash, Docker, DBT, Airflow, Flask
GCP: VertexAI(Kubeflow), BigQuery, Dataflow (Apache Beam), Cloud Functions, Cloud Composer (Airflow), PubSub, Cloud Storage, MemoryStore (Redis), FireStore
AWS: SageMaker, Lambda Functions, S3, Redis, API Gateway, CloudWatch 
CI/CD: Azure DevOps, Terraform

Built our new data warehouse (on BigQuery) and ETLs, currently powering most of data at Flinks:

Tools:

Data tools: dbt, great_expectations, lightdash
General tools: Python, Golang, Bash, SQL, Docker, Airflow, Flask
GCP: BigQuery, Dataflow (Apache Beam), Cloud Storage, PubSub, Cloud Functions, Cloud Run
CI/CD: Azure DevOps, Terraform

Built many of our product analytics models and dashboards (SQL, Pandas, PowerBI, Streamlit) — These are frequently being used by various teams today.

Trained statistical models around fluctuations in quality of US/Canada banking connections — This lead to useful insights around major drops in conversion rates for some banks, impacting order of magnitude of ~ %10 of ARR.

Built a metrics dictionary for the company, with the help of our PMs and engineering leads (really grinding work, but rewarding) — I later used this for data modeling of our new data warehouse.

I then got support from many stakeholders for designing and building a new centralized data warehouse on BigQuery, streaming ETLs, and DBT models downstream — This is powering entire data at Flinks today.

Tools:

General tools: Python, Bash, SQL, Docker, Streamlit, pandas, numpy
GCP: BigQuery, PubSub, Dataflow (Apache Beam), GCS
CI/CD: Azure DevOps, Terraform

Software Engineer @ AI Research Lab (2020-09 to 2021-03)

Worked on a ML storytelling engine. Wrote code for preparing large datasets, training and fine-tuning various models, as well as serving them:

Tools:
Python, Bash, Docker, PyTorch, GCP, Flask, React

Full-Stack Dev @ Zaxada (2019-05 to 2019-09)

Wrote the MVP for an Austrialian seed stage startup. An e2e E-commerce integration platform to connect indvidual stores (Shopify, Woocommerce, Magento) to Southeast Asian marketplace (jd.com, zilingo.com). This included componenets for Orders and shipping management, Inventory management, Product management, and Pricing management. Backend in Django and Frontend using boilerplate react.js code.

Tools: Python, Bash, Docker, Django, Gunicorn, NGINX, PostgreSQL, Celery Beat (with Redis), React.js

Product Manager @ ArochoTech (2018-04 to 2018-08)

Helped build a real-time prediction app for world cup. I led product, working with 4 devs on the team. Few tangible things I did:

Data Scientist @ Banimode.com (2017-11 to 2018-04)

Biggest clothing e-commerce store in Iran in terms of market share. I helped marketing team efficiently grow traffic very quickly (~3x in 6 months)

Co-founder and Product @ Poloto (2016-08 to 2017-09)

Co-founded an ecommerce platform in Iran (similar to Shopify), and helped grow it to ~50 paying customers and grew the team to 12 engineers. I lead the product, working with some wonderful people, pivoting to find product market fit. And made many PM mistakes as my first experience working with devs, so I learned a lot. We did show traction, but eventually couldn’t make our subscription model scale.

Externally, I helped raise an angel round, and gave investors a good idea of how we chose to deploy our runway. Also paulgraham.com/love.html

.:~:..:*~*:..:~:..:*~*:..:~:..:*~*:..:~:..:*~*:..:*~*:..:~:..:*~*:..:~:..:*~*:..:~:..:*~*:..:~:..:~:..:*~*:..

Eduction: autodidacticism for most part.

I grew up in Iran, and went to a top engineering school in 2016 to study embedded systems ( ranked 405 among ~ 180k participants of Iran’s mathematics university entrance exam competition) - But then skipped most of the classes, occasionaly sat at some grad courses, played with micro-controllers, taught embedded programming to undergrads, fixed a very expensive robotic arm, made some money freelancing, and eventually dropped out to build a business.

I then moved to Toronto, and took some CS, math and stats courses. Lots of good Data Structures/Algorithms practice, grad level stats courses, some heavy math ML courses, wrote a DNS resolver, and implemented OS components in C. Also played lots of poker with friends.

.:~:..:*~*:..:~:..:*~*:..:~:..:*~*:..:~:..:*~*:..:*~*:..:~:..:*~*:..:~:..:*~*:..:~:..:*~*:..:~:..:~:..:*~*:..

Broader Life and Play

I currently live in Toronto, and I love the city. Prior to that I grew up in Iran. I consider myself a rationalist and buddhist. I enjoy playing poker with friends, listening to 90’s rap, and reading sometimes (recently mostly on topics like epistemology, information theory, philosophy, rationality, quantum physics, game theory, etc.). Recently I’ve been developing an interest in building quantitative models for systems with uncertainty in them (read financial markets). Lately I’ve been spending my time outside of work on quantitative trading research, reading research and implementing research tooling.

Intuition

Here are some variables I sometimes think about, working on projects. They’re not principles, but just loosely held opinions/stances (hopefully):

Zen of Python

>>> import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!