Ben Dean
Software Engineer specializing in automation and tools to streamline the build and deployment
pipelines.
Email / LinkedIn / GitHub / Keybase
TL;DR
Just the highlights in case you don’t want to read the whole thing.
- Over 14 years of experience on various DevOps, Build,
Tools teams.
- Extensive experience with various DevOps tools and frameworks, IaC, CI/CD, etc.
- Automate Everything - I do not like manual processes. Automation reduces the opportunity for
human error.
- Ability to learn whatever is needed. Gained from years of reading other people’s code to help them
figure out what’s going wrong and solving complex problems. Also from picking up new programming
languages and technologies.
Technical Experience
Lead Software Engineer @ Finvi (formerly known as Ontario Systems) (2008 - Present)
Jan 2012 - Present - Various “DevOps” teams and projects
Starting around the beginning of 2012 I joined a team whose goal was to automate the build,
deployment, and infrastructure of new software products. This started with deploying systems to
private hosted environments (VMWare) and transitioned over time to deploy system to public cloud
services (AWS). There are a number of technologies and tools used some dating back to that initial
work in 2012.
- Jenkins - build server, deployment orchestration
- Chef - configuration management and automated software provisioning
- Terraform - infrastructure automation
- Packer - building images to deploy in AWS
- Docker - building containerized applications
- Kubernetes - cluster for running containerized microservices
- Helm - deploying software releases to Kubernetes
In addition to the “devops” work, our team was often tasked with various side projects. Some notable
projects are:
- Web app to organize product install and upgrade testing across multiple combinations of versions
and supported platforms.
- Simple artifact repository with additional APIs to support various needs of our software.
- Web app to track delivery of software products to premise customers.
- CLI for launching containerized versions of InterSystems Caché/Ensemble/IRIS products in Docker.
- Web app and auto-updating framework for downloading and updating various in-house tools.
Jan 2009 - Dec 2011 - Large scale .NET-based enterprise web application built on top of Microsoft
Dynamics CRM and hosted in IIS 7.
- As a member of tools/build team I was responsible for understanding the system architecture and
providing utility programs, libraries, and installers that enable the rest of the team to be
productive and deliver a cohesive, working product.
- The technologies used in this product include .NET 3.5, Microsoft Dynamics CRM, SharePoint, IIS 7,
C#, WCF, WF, Silverlight, SQL Server, WiX, T4 Code Generation, MSTest, and Rhino.Mocks.
- Microsoft Team Foundation Server was used as a source control repository and task tracking system.
Sept 2008 - Dec 2008 - Large scale Java-based enterprise web application using the Spring
Framework and hosted on the JBoss Application Server.
- On this product I worked on a team responsible for providing the framework code that connected the
entire application. We used Spring’s Inversion of Control framework to wire together the different
parts of the larger web application.
- The technologies used in this product include Java 6, Spring, JBoss, Hibernate, JMS, CXF, JUnit,
and EasyMock.
- Subversion was used for version control and Maven was used to manage software artifacts.
Software Developer / Instructor / Graduate Assistant @ Ball State University (2004 - 2008)
- Teaching Assistant for several computer science courses - running labs, grading assignments,
writing automation.
- Research Assistant on several projects with published research papers.
- Teaching internship team-teaching interdisciplinary course on computer game design.
- Instructor for intro to computers summer courses.
- Contract software developer with Mathematics Department.
2008, 2009, 2011, 2015, 2016 - Mathematics Department - Software Developer
- Hired to add features to the Julia Fractal Drawing Tool, a Java application.
- Restructured the project migrating the original code base to GitHub: bsumath/julia
- Refactored and redesigned portions of the system using object-oriented principles and design
patterns.
Summer 2008 - Computer Science Department - Instructor
- Taught Introduction to Microcomputers course.
- Was responsible for lab exercises, lectures, assignments, exams, and grading.
Spring 2008 - Computer Science Department - Teaching Internship
- Was one of three instructors to team-teach an interdisciplinary course on computer game design.
- Applied a process based on the Scrum iterative incremental process for agile software development
while working with a team of students developing a computer game.
- Designed a lecture and sample program to demonstrate methods of efficient collision detection
using the Visitor and Strategy software design patterns.
- Instructed students on object-oriented design, software design patterns, refactoring and
redesigning software, and the use of collaborative tools such as Subversion.
Spring 2008 - Computer Science Department - Sun SPOT research team
- Collaborative project to explore the Sun SPOT’s capabilities and its uses in computer science
education.
- The Sun SPOT (Small Programmable Object Technology) is a wireless sensor device that runs the
Squawk Java Virtual Machine. This allows it to run CLDC 1.1 Java ME applications.
- Developed a wireless population growth and migration simulation to run on two or more Sun SPOTs.
2007 - 2008 - Computer Science Department - Research Assistant
- Collaborated with a professor in writing research abstracts and papers.
- Computer science education experiments and statistical analysis of student survey data.
- Web development and software tool development to support research.
2006 - Software Engineering Research Center (SERC) - Research Assistant
- Member of Global Software Testing research team. Funded by the NSF in conjunction with the
University of Limerick, Ireland.
- Member of SMART: Security Measurements and Assuring Reliability through Metrics Technology
research team. Funded by the Army Research Lab.
- Lead developer of the Global Access Testing Environment (GATE). Software testing management web
application written in PHP, HTML templates, JavaScript, Asynchronous JSON, and MySQL.
2004 - 2005 - Computer Science Department - Teaching Assistant
- Courses in Java, C++, Visual Basic.net, Access databases.
- Responsibilities include lab instructor, grader, substitute lecturer, office hours.
- Designed Bash scripts to automate parts of the grading process.
Freelance Web Developer (2003 - 2004)
- Met with clients to analyze their business needs.
- Designed and implemented a simple content management web application that can be modified for a
variety of business solutions.
- HTML templates and JavaScript create a user interface that can be altered independently of the
rest of the system.
- PHP scripts control the application and fill the HTML templates with data
- MySQL provides the relational database backend which stores all the dynamic web content.
Contractor / Intern @ Thomas & Betts Reznor (2001 - 2002)
- Developed applications for the Quality Control and Information Technology departments using ASP,
Visual Basic 6.0, HTML, JavaScript, MySQL, and AS/400 via ODBC.
- Lead developer responsible for the design and implementation of the applications.
- Met with end users to design systems that fit their business needs.
- Conducted testing and troubleshooting of applications to make them stable for use in a production
environment.
Skills
I am familiar with many programming languages and technologies. Some of these are listed earlier in
the work experience section, but I’ll highlight some of the more recent skills here.
Programming languages
-
Ruby
Used in our Chef cookbooks, various automation tools, and some simple web applications.
-
Go
Used in microservices we deploy to Kubernetes and in various automation tools. I’m familiar
with many popular open source go libraries and SDKs.
-
HCL
The configuration language of Hashicorp’s Terraform and Packer tools. Also recently used in
Docker bake for building images.
-
Make
Most of our builds use have a Makefile that defines various build targets. These are designed
to work the same on the build server as in local environments so developers can build their
software using the same tools as the build server.
-
Bash
Used to script various repetitive tasks and as part of our build and deployment automation.
-
Groovy
Used in Jenkins Pipeline scripts and libraries of shared build pipeline functionality.
-
ObjectScript
The programming language used by the InterSystems platforms that many Finvi products are
built upon.
-
I often have to help product teams figure out what’s going wrong in their projects which involves
reading and sometimes writing code in various languages. These include Python, C#, C++, Java,
Perl, etc.
-
AWS
The cloud platform used for Finvi’s products. Services used include (but are not limited to)
EC2, ELB, VPC, Route 53, EKS, ECR, IAM, S3, Aurora/RDS, Lambda, KMS, and SSM.
-
OCI - Oracle Cloud Infrastructure
We also deploy products to Oracle’s Cloud, OCI. Similar cloud offerings to AWS are used in OCI.
-
Kubernetes
We use Kubernetes, in particular AWS’s Elastic Kubernetes Service (EKS) and Oracle’s OCI
Kubernetes Engine (OKE) to deploy our container-based applications and microservices.
-
Helm
Helm is the tool we use to release code to our kube clusters. All of our microservices and web
applications that run in kube have helm charts in their repos. These charts also make use of
some library charts we make available using a private ChartMuseum. We also make use of a
number open source charts to deploy things like Jenkins,
NGINX Ingress Controller, ExternalDNS, and cert-manager.
-
Jenkins
Jenkins is our build server, used both to build the Finvi products and deploy them to various
stacks in AWS using all the aforementioned technologies. Our Jenkins server is configured using
Configuration as Code and uses build nodes both on EC2 instances and kube pods.
-
Github Actions
We use github actions for building and publishing some of our open sources projects. I also used
them to build and publish this cv.
-
Chef
This is used to install and configure Finvi software on EC2 instances in AWS. I have written
and maintain over 30 cookbooks as well as utilizing and contributing to open source cookbooks
from the Chef Supermarket.
-
Terraform
I use Terraform to automate the creation of infrastructure in AWS. Our terraform repos are
configured to deploy into different AWS accounts based on configuration variables. Some common
functionality is modularized to be reused by multiple repos, and we also make use of some open
source community modules from the Terraform Registry.
-
Docker
Several Finvi products are based on microservices, which are built and delivered as Docker
images. Most are either built on base images from Docker Hub (running Alpine, Debian, or
Ubuntu Linux operating systems) or from scratch images that run binaries we build.
-
NGINX and Apache httpd
Various Finvi products use Apache and/or NGINX to server their web applications or proxy to
some backend webserver.
Other skills
There are a number of other skills that are important for software development but don’t fit into
the categories of programming languages or technologies.
- I use a mixture of Windows and Linux for my development environment. I’m currently running Ubuntu
on WSL2. I also know Amazon Linux, CentOS, Red Hat, Oracle Linux, Debian, and a little Alpine
Linux for our EC2 and Docker container-based products.
- I have used a source control systems and am most familiar with Git and Mercurial.
- I encourage teams to use Semantic Versioning to help with dependency management software
maintainability.
- I have worked with a number of branching strategies, in particular Gitflow and feature branch
workflows. Open source projects I’ve contributed to typically use some form of GitHub flow or
trunk-based workflows.
- I have contributed to a number of open source projects and am skilled at reading other people’s
code.
- I have used Jira and FogBugz for task management.
- I have worked on teams that use Scrum and Kanban-based processes. I’ve also read the
Manifesto for Agile Software Development.
- I have used Test-driven Development on a number of projects.
- My text editor of choice is Vim, but I’ve also used JetBrains IntelliJ and RubyMine, Visual
Studio, VSCode, Notepad++, and others. I used to use Emacs in grad school and don’t hold anything
against people who prefer it over
vi.
Education
(Incomplete) Doctorate of Education in Computer Science. GPA 4.00/4.00
Ball State University - Muncie, IN (2006 - 2008)
- Computing Theory cognate
- Research in student perceptions, object-oriented design, computer game design, and their
applications in computer science education.
- Decided to pursue software engineering career rather than finishing Ed.D. degree.
Master of Science in Computer Science. GPA 3.97/4.00
Ball State University - Muncie, IN (2004 - 2006)
- Graduate courses in Software Engineering, Software Testing, Research Methods, Database Design,
Network Programming, Applied Cryptography, Graphical User Interfaces, Operating Systems,
Computational Geometry, and Theory of Computation.
Bachelor of Science in Computer Science Systems. GPA 2.75/4.00
Taylor University - Upland, IN (1998 - 2002)
- Integrated computing track.
- Systems analysis and design component.
Grove City College - Grove City, PA (1997 - 1998)
Publications
2008
Paul Gestwicki, Fu-Shing Sun, and Benjamin Dean.
Teaching Game Design and Game Programming Through Interdisciplinary Courses.
Journal of Computing Sciences in Colleges,
pages 110 – 115.
Consortium for Computing Sciences in Colleges, September 26, 2008.
2007
Benjamin Dean and Paul Gestwicki and Juan H.
Measuring Changes in Perceptions and Self-efficacy in CS1,
Proceedings of the 2007 Internation Conference on Frontiers in Education: Computer Science and
Computer Engineering,
pages 187 – 192,
CSREA Press, June 26, 2007