Emanuele Peruffo – Curriculum Vitae

I’m a passionate full-stack web developer who thrives to stay up-to-date with the new trends in the IT.

I worked as a freelance, building tailor-made software and websites. This was allowing me to choose the best technologies for the projects I was working on, while also giving me the possibility to experiment.

I applied the JamSTACK and the serverless architectures, coding in TypeScript:

  • responsive static front-ends based on React and RxJS
  • Node.js back-ends based on ExpressJS running on the AWS Lambda and the Google Cloud Functions platforms

Work Experience

Full-Stack Web Developer, from 2021

Klarna Italy, Milan, Italy

At Klarna, I deepened my experience in Agile software development thanks to the adoption of Scrum.

I had the opportunity to work in different teams, which interact on a daily basis, thanks to the structure of its multinational nature.

I worked extensively on React front-ends and Node.js microservices.

My Duties at Klarna
  • design and development of a browser extension
  • design and development of iOS and Android apps
  • design and development of microservices

Full-Stack Web Developer, 2014 – 2021

Freelance, Vicenza, Italy

I started working as a freelance web developer thanks to a contact network I built during a two years stay in Melbourne, Australia.

My first project, on which I’m still working, is built on the Yii PHP MVC framework and runs on three replicated AWS EC2 instances alongside a MongoDB database, replicated as well on the same servers. Every component of this application is a Docker container created by docker-compose.

While working on this first project, I felt that my expertise needed an upgrade.

While Node.js was gaining rapid pace and new and interesting frameworks like React, Angular and RxJS were emerging, I was still relying on PHP and JQuery.

For this reason, I invested time for learning to develop accordingly to the latest technology trends.

I discovered many interesting projects along the way, which helped me to expand my specialization and broaden my mind.

For this reason, I consider it imperative for a software developer to never stop learning and to satisfy their own curiosity, reserving part of their time for study.

Scala and the Play Framework

Experimenting with Scala helped me to embrace functional programming, evolving my coding style from the traditional OOP programming.

Scala allowed me also to deepen my knowledge on the whole JVM platform:

  • Java
  • Kotlin
  • Android
  • the technologies brought by Lightbend, formerly known as Typesafe, like Akka, the Play Framework and the Lagom Framework
  • the Microservice Architecture
  • the MessageFormat syntax for internationalization
The Cycle.js front-end framework and RxJS

I love Cycle.js framework because it allowed me to experiment with the Observable Pattern, the Reactive Streams, and to become familiar with Reactive Functional Programming with JavaScript.

Thanks to Cycle.js I discovered RxJS, which changed the way I work with REST API calls and real-time communication on the front-end.

The Model-View-Intent pattern Cycle.js suggests following feels natural and allows writing clean, readable, structured and maintainable code.

Cycle.js attracted me so much that I took it into consideration for the development of my front-end projects; its lack of community unfortunately stopped me.

Serverless computing

I have a deep knowledge of Linux and FreeBSD; however, I consider server maintenance an unnecessary burden.

The Serverless Framework allows me to focus mostly on developing, while delegating system administration tasks to the cloud provider.

  • AWS Lambda with AWS RDS as database and AWS IoT for real-time communications
  • Google Cloud Functions with Cloud SQL, Firebase or Firestore as database and Firebase Cloud Messaging for real-time communications
Cloud Servers

I deploy projects on cloud servers when I can’t rely upon serverless computing.

I deploy on AWS EC2, Vultr or DigitalOcean as needed.

The NixOS Linux distribution eases the maintainability of my cloud servers, which share a common declarative functional configuration.

Docker

We all know how Docker allows us to create predictable execution environments.

I use Docker and docker-compose when I deploy to cloud servers.

React, Redux, RxJS and GatsbyJS

I discovered GatsbyJS while inspecting various static site generators, like Jekyll, Hugo, Hexo and Metalsmith.

GatsbyJS is exactly what I was looking for because it creates optimized React applications.

React is the framework I’ve chosen, after having carefully evaluated learning curves, bundle sizes, performances and community sizes.

Working on GatsbyJS allowed me to deepen my knowledge with React development:

  • Redux for state management; I find it easy and intuitive considering my Functional Reactive Programming approach instilled by Scala and Cycle.js
  • Emotion as CSS-in-JS library
  • react-intl and the MessageFormat syntax for internationalization
  • RxJS for REST API calls and real-time communication
  • TypeScript
Node.js and ExpressJS

Coming from a PHP background, I found any other development platform really attractive.

I experimented first with Rails in Ruby, then with Play Framework and AKK HTTP in Scala.

I eventually opted for Node.js as development platform for back-ends for various reasons:

  • wide community
  • possibility of coding with a typed language thanks to TypeScript
  • optimal performances thanks to V8
  • support for the main serverless computing platforms: AWS Lambda and Google Cloud Functions
  • reusable code between front-end and back-end
  • common programming language between front-end and front-end

The back-ends I develop are ExpressJS applications:

  • TypeScript code
  • compilation to JavaScript with Webpack
  • authentication with Passport.js
  • authentication and Oauth2 authorization with oauth2orize
  • deploy with Serverless Framework
  • test with Jest

Full-Stack Web Developer, 2012 – 2014

1form Online Pty Ltd, Melbourne, Australia

I extensively contributed to the remake of 1form, which is the most widely used website for online tenancy applications in both Australia and New Zealand. 1form claimed more than three million registered users in 2018.

I worked for 1form as a contractor at first, then on a full-time position on a 457 Temporary Work (Skilled) visa.

1form was born as a start-up founded by Chris Koch and Chad Stephens, two smart entrepreneurs who succeeded launching this great online service quickly.

REA Group Ltd, the Australia’s leading real estate company, bought 1form in 2014.

The magnitude 1form required a careful design and code structuring to facilitate tests and techniques of agile development.

By the second year, I was developing 1form almost autonomously:

  • development
  • tests
  • beta tests
  • deployments
  • server and database administration
My Duties at 1form Pty Ltd
  • remaking of the old 1form.com.au and launch as 1form.com, with a solid foundation on built the top of the Yii framework
  • development with HTML 5, CSS, SASS, JavaScript, JQuery, PHP and MySQL
  • project management, bug and time tracking with JIRA
  • analysis of requirements and design
  • cooperation with the QA and customer service departments to fix bugs and improve functionality
  • administration of servers, databases and development environments

Full-Stack Web Developer, 2012

Univex, Melbourne, Australia

This was my first job as an independent contractor in the IT while in Australia.

I worked on a preexisting web application which displays digital signage content on remote devices, retrieving them from a centralized server written in Python.

I also contributed to the creation of a new web application for the management of a beauty salon accepting also POS payments; this application was based on the Yii PHP framework.

My Duties at Univex
  • maintenance of a preexisting web application written in Python
  • implementation of a solid foundation for a new extensible web application
  • SQL database design
  • project management, bug and time tracking with JIRA

Full-Stack Web Developer, 2009 – 2011

E-side, Vicenza, Italy

This is the job where I stated my experience as a web developer.

I worked on multiple websites using HTML, CSS, PHP, MySQL, JavaScript, MooTools, JQuery.

Considering the period, I had to develop effective techniques to implement cross-browser websites, specifically addressing Internet Explorer (v6 and subsequent) issues.

I had the opportunity to build complex websites requiring careful database design implementing appropriate indexes, triggers and custom functions.

I mastered MySQL and learned to write advanced and optimized SQL queries.

My Duties at E-side
  • web development using a custom CMS
  • advanced MySQL functionalities like triggers and stored procedures
  • cross-browser development

Full-Stack Web Developer, 2007 – 2008

Studio Storti, Vicenza, Italy

This has been my first job as a web developer.

I developed open source web applications for public administrations written in PHP guided by a senior developer.

I used ExtJS extensively, which is a JavaScript library providing GUI tools to ease the front end development.

My Duties at Studio Storti
  • design and development of web applications with PHP, MySQL, HTML and JavaScript
  • SQL database design
  • practical experience in the software development processes: definition of requirements and analysis, design, development, test and support

Stage as Full-Stack Web Developer, 2007

Stage at Studio Storti, Vicenza, Italy

I attended professional training for six months in the company, which then employed me full time.

Please read the previous section to learn about my work experience at Studio Storti.

Education

ITIS G. Chilesotti, Vicenza, Italy

High School Diploma as a Computer Expert, 2001 – 2006

I attended this course following my passion for the IT.

This course provided two years common to all schools of this kind, followed by a three years specialization in Information Technology.

It deals with topics like software programming, databases, web programming, networks, system administration on Windows and Unix-like environments.

This course teaches the bases of procedural and object-oriented programming with Pascal, Delphi, C++ and Java.

It deals with web technologies, particularly HTML, JavaScript, PHP and MySQL.