My Tech

Software Engineering, Javascript, Typescript, React, React Native, NodeJS, Restful services, serverless, Redux, FSM and Statecharts. GraphQL, Elm and ReasonML are into my Radar.

SKILLS

Languages: J​avascript, Typescript, ReasonML (beginner), Elm (beginner) Golang (beginner), HTML, CSS

Web Development Technologies: React, React Native, Redux, Mobx, Xstate, Nodejs, Express, AWS cloud services, Restful services, GraphQL, Gatsby, Angularjs, Firebase, Jest, Babel, Webpack, Styled Components, Sass/Scss, Rxjs, CI systems, Docker, Redis, RabbitMQ

Mobile Development: React Native (Android and iOS), Cordova (Ionic, Phonegap), Flutter (willing to learn)

Databases: MySQL, PostgreSQL, MongoDB, DynamoDB

Others: TDD, Heroku, Netlify, Git, Git Flow, WebSockets, Continuous Delivery, Continuous Integration, Design Patterns, Pair Programming, Agile

Soft skills: Very Good at communication, International Technical Speaker, Team player, Open Sourcerer , Technical Blogger.

Currently looking into ​Distributed Systems, Microservices, Serverless, Software Architectures and Functional Reactive Programming.

EDUCATION

BSc in Aerospace Engineering, Sharif University of Technology in Tehran

Python programming, Duke University

PROFESSIONAL EXPERIENCE

Senior Software engineer at Futurice

Nov 2018 - Present

Full-stack engineering on Frontend, Backend, Cloud and Mobile using Javascript, Typescript, Restful services, GraphQL, AWS, serverless and Nodejs.

Employer and personal branding by constructing and giving technical talks at internal events, meetups and conferences.

Senior Software Engineer at Smarp

May 2018 - Nov 2018

Using Angularjs and React

Maintaining a legacy product (Social Network) and Developing the new product, migrating logical parts.

Migrate legacy code into new codebase (React, Redux, Webpack)

Create API Client abstraction on top of Smarp’s core API to handle API data models, data interfaces, custom data selectors/transformers, Testability

Refactoring proposal for i18n mechanism on the web and mobile clients on Smarp product

New notification system into an Event sourcing mechanism

Proposal for the new design system, working tightly with Design and UX team for better E2E and integration testing coverage, solid design components, documentation, and right abstractions.

Scrum, Kanban, Agile values, Teamwork, Internal tech events

Project manager of Engineering blog

A member of hiring process

[CONTRACT]​ ​Lead Javascript Engineer and Consultant at Beeptunes

​Oct 2017 - May 2018

Tech leading and developing on a shared mobile-web React application (similar to Spotify), meant to play and stream audio tracks, albums, artists.

Written in React and Redux, uses a core package which shares logic and components - between React and, React Native, and probably Electron (in future). Uses modern Javascript development environment.

Teaching React, Redux, Modern Javascript and Testing best practices to the tech team.

Senior Frontend Engineer at Talos Digital

Jul 2017 - May 2018

Maintaining the US and Mexican based company's online digital service for managing the whole Real Estate industry including All the legal access roles, legal document management, and legal process audit

AngularJS, PhantomJS, Karma, Jasmine.

Passenger1 flight and accommodation booking system using React, Redux, Firebase, Jest, and Enzyme.

Agile, Scrum

Lead Javascript Engineer and ScrumMaster at PersianGig

Sep 2016 - Sep 2017

Rewrote multiple B2C and B2B cloud services (cloud storage, cloud-ware) from Dojo Toolkit to React and Redux. Because of better UX, being responsive for mobile users and increase in performance, our customers grew up to 1 million and 450 thousand. (45% growth)

Upgraded a direct HTTP upload service to a Node.js, concurrent, chunk enabled uploader. Since the service is more reliable and supports link resumes, drag and drop and folder upload, our upload instances grew up to almost 20,000 instances per day and decreased the number of tickets complaining about failed uploads, hence caused a better situation for our customer support team. (logs indicate a 60% growth in upload usage).

Add testing to projects up to a reasonable code coverage to increase consistency and avoid common mistakes. Before that, the codebase didn’t have any.

Brought Git Flow to the dev team that decreased the number of conflicts and increased development speed on the codebase.

Gathered a small team of developers to run daily workshops on tech topics such as CI, DevOps, ... to make sure everybody learns as a team.

Mentored a junior frontend developer through a solid educational program (which I designed) and prepared them for team projects.

Enhanced the CI pipeline to cache none-updated assets that decreased the frontend build duration up to 50%.

Integrated upload interface with the native camera to increase UX.

Designed and developed an embedding system for cloud-based files.

Came up with an ACL system on projects that helped the company to reuse code base and extend its business model from B2C to B2B that eventually led to a 200,000 Euros contract with the main telecommunication service in Iran called Irancell.

Rewrote file preview/download service to Node.js server-side rendered pages.

A member of the hiring process.

Web Developer at Bertina Co

Dec 2014 - Sep 2016

Developed Employees Portal using AngularJS, a service to manage employees, monitor their activities, request for vacations, etc

Developed Minisite, a service to provide minimal, responsive personal portals with many themes and live management service using AngularJS, jQuery, SCSS

Developed Chia, an Android application with a gamification approach to learning the English Language, including different levels, payments, live competitions using jQuery, Cordova, Socket.io and Node.js

Developed Hamkalam, an IM application for Android devices providing an anonymous chat service to the public using AngularJS, Node.jS, and MySQL

Developed CartoonLand, an Android application providing cartoons for kids, streaming online videos with multiple qualities, download manager to cache downloaded videos, user management, IAB for payments using jQuery, Cordova, PHP, MySQL

Developed multiple enterprises and personal responsive websites using Wordpress, jQuery, AngularJS

A member of the hiring process.

Talks

So you think you know state management?

Loading talk preview

This is a talk about how client side application's state is inherently relational and hierarchical. Current tooling in JS state management allows for flat model states and global actions availability which results in an increase in cyclomatic complexity. The flat shape of state also brings its own set of integration problems. these issues could be tackled using a modeling language that considers this relation, gives lifecycle to the parts of state and invalidates automatically, is deterministic and whitelists allowed transitions instead of blacklisting on runtime guards.

Podcast Guest @ Webbidevaus Podcast

Listen to the podcast here

A podcast episode about React finland 2019 state management talk sections

Podcast Guest @ Devchat (React Roundup) Podcast

Listen to the podcast here

A podcast episode and a friendly chat around my talk at React finland 2019 on using state machines to model UI behavior abstractly

Experiments with State machines and Overmind @ Christian Alfoni

Loading talk preview

A friendly dev chat with Christian Alfoni about supporting Finite state machines in Overmind which is a tool Christian is working on actively

A hitchhiker's guide to Svelte JS @ HelsinkiJS Meetup 2019

Loading talk preview

It's been a while since SvelteJS was introduced as yet another Javascript solution to build fast and robust web applications. in this talk, we'll dive into what svelte is and try to fashion a high level understanding of its building blocks. if you don't know Svelte yet or you've heard of it but haven't had the chance to get to know it yet, fear not, I'm like you. let's do it together.

In Pursuit of Finite States @ SkyHacks Poland 2019

Loading talk preview

A talk about explicitly thinking about states of GUI components. Implicit vs Explicit state, finite vs infinite state, logic modeling and logic visualization.

The art of explicit and consistent user interfaces v2 @ HolysJS Moscow 2019

Loading talk preview

There are many reasons why developing user interface is hard. No matter which platform we target or the way we present our UI, the user interface is hard to develop due to different reasons. One of the hardest problems of UI development that has been shining more and more in recent years is the state management. In this talk, Farzad will show how using current tooling isn't the complete solution and how our current approaches lack a whole modeling layer in between and what are the most critical mistakes we make in modeling our user interfaces these days. He will demonstrate how this modeling problem can be enhanced using state machines and statecharts in particular.

Tackle React component complexity using Reactive Statecharts @ ReactJS Day Italy 2019

Loading talk preview

There are many UI components that carry a huge deal of complexity. Usually, we deal with complexity in UI without noticing it. As truly said, the devil is in the detail. We usually don't notice this until it's too late! That's why no matter how clean our components and their API surface looks when the first attempt is out, many bugs pop out soon and adding new features gives us a hard time! In this talk, I will try to demonstrate how we underestimate the complexity in React UI components and propose an approach to simplify this effort by modeling the behavior of the component using Reactive Statecharts. I'll go through the thinking model of how to tackle this complexity in developing the component, how to think properly about the edge cases and how to model this explicitly using Reactive Statecharts.

The art of explicit and consistent user interfaces @ 404Fest 2019

Loading talk preview

The user interface is challenging to the core. There are many UI components that carry a huge deal of complexity. Usually, we deal with complexity in UI without noticing it. As truly said, the devil is in the detail. We usually don't notice this until it's too late! That's why no matter how clean our UI and their API surface looks when the first attempt is out, many bugs pop out soon and adding new features gives us a hard time! As animals, we might not have a great tool (sarcasm towards our own brain) to think, consider and compute. we tend to forget. we can't consider everything. we are unable to foresee and predict software. we carry assumptions that aren't correct all the time. This might be a reason why our software starts as an explicit, great looking codebase until the moment reaches when this so-called software transitions from evergreen to ever failing and legacy. By thinking about the history of UI development and trying to explore different complexities, we might be able to find better ways to develop UI.

Introduction to modeling with Finite state machines @ GDG Helsinki 2019

Loading talk preview

Finite state machines are a mathematical means of computation. In this talk, we’ll go through why using them might help us simplify the challenges we face in day to day UI development and how they help us communicate better with people from different backgrounds in the same team. Although the talk will focus mostly on UI development, the concept is abstract and can apply to any problem solving process. Developers, Designers and even product related roles can take something out of this talk.

Explicitness and Consistency in UI @ Futurice Tech weeklies 2019

Loading talk preview

A talk about hidden complexities of UI, proper domain modelling and how we underestimate this complexity.

React Hooks vs Reactive Statecharts @ TampereJS, 2019

Loading talk preview

A talk comparing React Hooks to Reactive statecharts in developing a service called HSLZone

React Hooks vs Reactive Statecharts @ React Helsinki June, 2019

Loading talk preview

A talk comparing React Hooks to Reactive statecharts in developing a service called HSLZone

Abstract component modeling in React @ React Finland 2019

Loading talk preview

Often when we need to develop user interfaces, we model the interface behaviour based on a visual design or the platform we ship onto. However, since the behaviour of the component is the same, it would be beneficial to find a practical way to share this behaviour between different platforms, styling systems, state containers, data transmitters and any other sort of integrations.In this talk, I'll be showing a set of techniques to model a semi complicated React component, independent from the common integrations.

Statecharts driven UI development @ ReactJS community 2019

Loading talk preview

A talk about why UI development is hard and how Statecharts can help us with that

Boost state containment with Redux Observables @ React Helsinki 2019

Loading talk preview

A talk about RxJS, Redux observables and their benefits

Headless React @ ReactJS Community 2018

Loading talk preview

A talk about developing Headless React components in order to boost reusability and composability of UI components

React without React @ Futurice Tech weeklies 2018

Loading talk preview

A talk about Using React or any other UI library on development and wipe them out on compile time in order to save bundle size and a boost in performance on runtime

Test Driven Development (Software Talks) @ Software Talks 2018

Loading talk preview

A talk about TDD on Youtube show SoftwareTalks

The state of Frontend development (Software Talks) @ Software Talks 2018

Loading talk preview

A talk about State of Frontend development on Youtube show SoftwareTalks

The life of a software developer in Finland @ CoderConf 2018

Loading talk preview

A talk about State of The life of a software developer in Finland

Contributions

XState: Statecharts implementation in JavascriptXstate VisualizerReact Native OfflineAutomated accessibility testsPaypal universal video playerReact power-plug Headless statefull declarative react components to manage side effectsAlveron (old: React woodworm) Elm & Reason inspired state management for ReactCarbon Online code screenshots toolingReact Static A progressive static site generator for ReactGraphPack A minimalistic zero-config GraphQL serverReact native card flip Card flip animation for React NativeCo-created open source Persian technical blog PullRequest.irActive member on Stackoverflow with 1600+ reputation