About Me

My name is Nat Baylon. I am a full stack software engineer with six years of experience working in agile development teams. I have lived and worked in Maryland for most of my life, but I am currently based in Granada, a beautiful city in the south of Spain, where my wife is from.

I started getting interested in web development as a teenager, when I had the opportunity to take programming classes in middle school and high school, and since then, programming has been prominent in my life During my university years, I attended several hackathons with my friends, and we placed 2nd in HackUMBC 2016 with a project involving controling sound and fractal patterns with a motion sensor. In 2017, I graduated with honors in Computer Science at the University of Maryland, Baltimore County. For the past few years, I have been traveling the world while working remotely as a Full Stack Software Engineer with Healytics, a Baltimore-based health information management and genome processing company, where I continue to sharpen my skills while doing what I enjoy the most.

My wife and me in Huelma, Jaén

My Stack

Here's a walkthrough of the technologies I most commonly use when developing applications:

Front-end

I have lately been developing single page applications (SPAs) using React. I like using Bootstrap or Semantic UI for styling / componentry, and Axios.js as a RESTful HTTP client. To manage the state of componentry, I started out using Redux, but later switched to using the built-in React Context API to reduce boiler-plate code and to improve maintainability.

Front-end Server & API Gateway

I am of the mindset that the front-end should be decoupled from the back-end to allow the two to be developed, built, and deployed separately. I currently use Nginx to achieve this since it can serve front-end builds and reverse-proxy HTTP requests to RESTful back-ends. Compared with Apache, Nginx makes a much better use of threads, is event driven, asynchronous, and non-blocking, making it able to handle a larger throughput.

Back-end

On the server side, I like to handle requests using Node Express. When request handling needs to be scaled up, I use PM2 to allow the application to run on multiple processes, and additionally, I have used Amazon Elastic Beanstalk to scale horizontally. Due to its single threaded asynchronous nature, Node.js is particularly good at handling the most common types of requests, such as requests involving querying databases or making additional RESTful calls. But if the back-end needs to handle more computationally heavy tasks (processing large files, machine learning, or math for example), I create a separate application in a suitable language that handles this processing, and use a messaging queue like RabbitMQ to allow the request handler to offload the work to a cluster of servers more suited to do the heavy lifting. This type of design pattern allows for great scalability. If the userbase expands, the messaging queue will fill up, meaning it will take more time for the worker servers to get to the tasks. And when this happens, it's simple to add more servers to the work cluster.

Database

When working with relational data, I typically choose Postgres as the database because it offers many features and can handle complicated queries and large datasets well. I use a good ORM in applications to query the database, such as Sequelize, to make the code more manageable and readable. When working with non-relational data or when rapidly prototyping an application, MongoDB with the Mongoose ODM as a is my go-to because it is very developer friendly.

Local Development Environment

In my local development environment, I use Ubuntu or a similar Linux distribution, git and Github / Bitbucket for source control, VS Code as my text editor. And when working with teams, I have used Jira and Confluence to manage tasking and documentation respectively.

Building & Deploying

Github and Bitbucket both have plugins available for triggering build servers on the event merging of pull requests, which I like to configure so that merging into the develop / main branch triggers Jenkins to build the project. I use webpack for minifying JavaScript projects, and Maven for building Java projects, and I use Docker to containerize the deployment of parts of the project.

Professional Experience

Full Stack Engineer

Healytics, Inc. Cockeysville, MD
June 2017 - Present

  • Created and maintained a suite of HIPPA compliant health data storage, messaging, and research applications that integrate directly with Electronic Health Records (EHRs).
  • Researched, designed, and developed a genomics processing pipeline that helps medical institutions identify genetic variants, detect diseases, and avoid adverse drug-gene interactions.
  • Transformed and maintained a messaging platform based on Rocket.Chat, created bots to help departments within health institutions respond to messages.
  • Responded to help desk tickets and feature requests from medical institutions.
  • Developed tooling to manage internal control processes and deployments

Full Stack Engineer & Scraper

Dotru, Inc. Columbia, MD
May 2016 - May 2017

  • Maintained a headless web scraper that visits websites, performs clicks, and extracts data using CSS selectors.
  • Built a RESTful application that assists in configuring the steps that the web scraper takes and the locations of the data of interest to be extracted.
  • Used a RabbitMQ work queue to encapsu late and execute scraping tasks.
  • Configured the scraping of hundreds of web pages.

Software Engineer

SBD II, LLC. Vienna, VA
May 2015 - March 2016

  • Developed a variety of Sharepoint workflows to expedite employee training module completion.

Want to get in touch?

Email me at nwbaylon@gmail.com
Call / WhatsApp me at +34 644 143 143
You can find a PDF of my resume here