Ed Yablonsky
Senior Software Engineer
DevOps
Team Lead
Clean Coder
I love writing code, and I love doing it not only for myself. It doesn't matter how big a task is. Despite its size or complexity, I do it with full dedication using the best techniques I mastered over my career.
I started my software engineering journey from C and C++. I felt in love with C++ and was swallowing all related books I was able to get those days. My first C program was written in a piece of paper and when I got to a computer it didn't compile because it wasn't written in ANSI standard. But I moved forward...
These days I still love C++ and know how to use it properly. But I'm also good at C#, Java, Groovy, Kotlin, Python, Go. I know a bit of Rust and I'm interested in its deterministic resource management approach. I can write good stuff using JavaScript, Lua, Perl, Shell, or PowerShell scripting languages. Also, I don't get attached to a specific paradigm and can use Object Oriented or Functional Programming or even mixed which I think strengthens the structure of a system maximizing its flexibility, maintainability, testability, and robustness.
Apart from experience in programming languages, I have years of experience with different application architectures, starting from small tools with a command-line interface or desktop GUI, including fancy mobile or Web apps, up to a complex multi-component cloud-based distributed applications. The applications were developed for a wide range of industries such as civil engineering, application development its quality and life cycle management, communication, education, finance, game development. The systems I've developed run on PCs controlled by Windows, Linux, macOS, mobile devices running Android or iOS, game consoles, and mainframes.
During my career, I've experienced a range of software development processes, some of them are more classic and a bit chaotic, some of them were almost agile. I even tried real SCRUM on one of my projects where I was a team lead. I like when I know exactly what needs to be done but it doesn't mean that I need direct instructions. I need to see a goal or at least a direction towards it. When a customer can't provide it to me I do all my best to help the customer to define it. Regardless of the processes, all my projects were done successfully, at least that what customers said.
I've been doing Test-Driven Development I think more than 10 years already. I do it in all the languages I've mentioned. After years of struggling and experience in the area, I'm sure that I know how to do it properly so it doesn't impede development but speeds it up instead.
I'm a clean coder or at least trying to be it. I believe that "the only way to go fast is to go well". Every time leaving less mess than found.
Software development is not only writing code. It is also an integration with other components, tools, libraries or frameworks, and even other applications. I know how to deal with source version control systems like subversion, git, mercurial. I've participated in the improvement and development of build systems for projects I've worked on. Over recent years I've gained experience in Continuous Integration, Continuous Deployment, and Delivery. I even developed the CI/CD system for microservices applications almost from scratch.
Talking about integration between software components we'll face a dependency management problem. This is one of the hard problems in software but I have knowledge and experience how to overcome it and build maintainable, and testable systems based on interchangeable components.
And the very important aspect of software development in my standpoint is communication with colleagues, sharing ideas, and learning from each other.
I love sharing my ideas with a team and I feel need in this. We all stand on each other’s shoulders. And the relevance of other's experience can't be understated. When I get some new idea I first of all search for a person who disagrees with it. Because I know that we see this World differently and everyone's vision is an indefeasible part of a solution.
Every Friday I conduct two hours Cyber Dojo session where together with my teammates we solve common software problems using different programming languages and the Test-Driven Development approach. And I invite not only programmers to attend the sessions.
This is pretty much it about me as a software engineer. Other testimonials you can find in my LinkedIn profile.
Programming Languages
Bash
C
C#
C++
Clojure
Fortran
Go
Groovy
Java
JavaScript
Kotlin
Lua
Object Pascal
Objective-C
Pascal
Perl
PowerShell
Python
Rust
Visual Basic
Platforms
Android
iOS
Linux
MacOS
OS/400
Windows
Tools
AutoCAD
AutoDesk AsdkModeler
bash
Borland C++ Builder
Borland Delphi
CMake
cygwin
DB2
Docker compose
Docker machine
Docker
eclipse
git
GitHub
GitLab
Gradle
Helm
IBM iSeries Access for Windows
IntelliJ IDEA
JamPlus
Jenkins
Jira
kubectl
Kubernetes
make
mercurial
Microsoft SQL Server
MySQL
OS/400 iSeries QShell
PowerShell
Rational Rose
sh
SlickEdit
Spacial ACIS Modeler
SQLite
Sublime Text
TestTrack
Trello
Umlet
Visual C++
Visual Studio Code
Visual Studio
XCode
Libraries & Frameworks
.NET ASP Core
.NET ASP MVC
.NET Core
.NET
Android SDK
ATL
AutoDesk ObjectARX
Boost
Cocoa Touch
Cocoa
COM
CppUnit
Enity Framework
Google Mock
Google Test
Iglu
jQuery
JUnit
MFC
Mockito
Mono
Moq
NUnit
OpenGL
OpenGLES
Qt
SoftFluent Entities
STL Soft
STL
Unity
VCL
Win32 API
WinForms
WPF
WTL
WxWidgets
ZeroMQ
Techniques
Actor Model
Clean Code
Code Re-factoring
Doman Driven Design
Fuctional Programming
GRASP
Object Oriented Programming
SOLID
Test Driven Development
Unit Testing
Education
Master's degree in Telecommunications, Radio broadcasting and Television, Mobile Telecommunications
1998
Ukrainian State Academy of Telecommunications
Graduated with honor
Bachelor's degree in Telecommunications, Radio broadcasting and Television
1996
Ukrainian State Academy of Telecommunications
Graduated with honor
Professional experience
Senior Software Development Engineer
December 2017 - May 2020
The product is an app that lets you draw small amounts of your check before payday. It provides alternative to expensive payday loans. The similar product to what companies such as PayActiv and FlexWage offer. I was a part of the team which responsible for building micro-services architecture and infrastructure and splitting the existing monolithic application into micro-services.
Responsibilities
Build and maintain infrastructure for micro-services
Build tools that help developers to use the infrastructure
Split monolithic application into set of micro-services
Build and maintain CI and CD pipelines for micro-services
Maintain legacy CI for monolithic solution
Guide developers in writing unit tests and testable code
Achievements
Built CI and CD pipelines using Jenkins and its Kubernetes plugin
We set up development and production clusters for micro-services
Improved Python skills
Learned msbuild scripting and methods to customize build process
Learned Kubernetes and its resources
Learned Groovy and pipeline scripting for Jenkins
Learned Helm and Go
Learned PowerShell scripting
Technologies
.Net ASP Core
.Net Core
C#
Git
Graphana
Groovy
Helm
Jenkins
Kibana
Kubernetes
Linkerd
Namerd
Prometheus
Python
Senior Software Development Engineer in Test
September 2012 - December 2017
I was a member of 'Toolsmiths' team that is responsible for developing and improvement of frameworks for testing of Unity3D platform. I took ownership over the run-time tests framework the most used framework for testing Unity on its API level. I've redesigned many component s of the framework using SOLID design principles and techniques of Clean Code. This effort has made the framework more robust and extendable. Those days we had >750 unique run-time API test cases. More than 10 000 test cases (across more than 20 platforms/players) are run in a single automated build verification test suite. And we easily execute more than 150 000 test cases per day. The tool for running the automation tests had a performance degradation while adding new tests. It intensively uses cross-process interaction with Unity Editor. I've analyzed the code in order to determine its computational complexity and to find redundant cross-process interactions. I've used code generation to create components which act on Editor's side and do all required actions at once rather than do each action by means of cross-process invocations. I've also found algorithm which has quadratic complexity and I've redesigned it. As a result time of running tests has been reduced in 30% percents. One of the big task was to build new bug reporting tool that every our customer uses. From the very beginning we developed the project using Test Driven Developing approach and put all the effort to keep design testable and maintainable. We have shipped the product much earlier than was planned and after first month of use we had only 10 minor and cosmetic bugs. I was involved in build infrastructure tasks and have mastered JamPlus. I even wrote the framework for unit testing in JamPlus. Part of my job is to teach and help other engineers to write tests and make the code testable.
Responsibilities
Improve existing frameworks and tools for testing
Teach developers how to write tests and how to make code testable
Technical review of codebase changes
Achievements
Greatly improved testing framework
New bug reporting tool with one codebase for all supported platforms
Learned Python and Perl
Mastered JamPlus
Technologies
C#
C++
Git
JamPlus
Mac OS X
Mercurial
OpenGL
OpenGLES
Perl
Python
Windows
Senior iOS & Android Software Development Engineer
April 2012 - September 2012
I've participated in variety of projects for iPhone, iPad, iPod and Android devices. The main product is a tool for managing cloud based storage. We were developed all product for both platforms iOS and Android. Despite of short period of my employment in the company I have mastered Objective-C, retain/release strategy, Core Data, Automatic Reference Counting, Grand Central Dispatch, Dispatch I/O, building UI by Story-boarding. And I have started to contribute into current projects by fixing existing issues and mentoring the rest of the team. I've participated in Android project as Team Lead. The project is a Point Of Sales kind of software. It utilizes Zero Configuration Network using jmDNS and 'Bonjour'-like services. I've designed and implemented fully operational prototype of Bump Screen printing subsystem utilizes Services (start and bind kind of services), communicating via sockets and using thread pools (executors) and asynchronous tasks. I also worked on pure Java project for Pearson KT. It uses socket communication, SSL, multi-threading via Java executor services. I've started from prototype using previous implementation and communication protocol specification as a reference. The client used iterative development process. Using TDD and techniques of clean code we always delivered user stories in time.
Responsibilities
Make prototypes for new clients
Contribute to current projects
Achievements
Helped to get new client that has signed long term contract
Learned basics of software development for Android and iOS
Learned Python and Perl
Improved skills in Java programming
Technologies
Android SDK
Cocoa
Cocoa Touch
Eclipse IDE
iOS
Java
Mac OS X
Objective-C
Objective-C++
XCode
Senior Software Development Engineer
November 2011 - April 2012
Lohika
HP Quick Test Professional (QTP)
Unified Functional Testing (UFT)
The project is a tool for functional testing of applications. It uses all popular technologies: Web, Java, Windows Native UI, Flex, PowerBuilder, Oracle, Cytrix, etc. It uses special agents which it injects into particular application. Each agent is constructed on a target technology and interacts with main components through various protocols.
Responsibilities
Developing of new features for future version of the product
Current product engineering and customers support
Achievements
Happy customers
Got experience in customer support from variety of businesses and countries
Technologies
C#
C++
COM
Java
VisualBasic Script
Windows
WinForms
WPF
Senior Software Development Engineer
September 2010 - November 2011
The project is web application for AlloCine partners. It allows to maintain information about show times and other activities for cinemas. This is web application hosted on IIS which interacts with back-end databases through common services packed in separate .NET assemblies. SoftFluent CodeFluent Entities framework is used to access Database. I was working on back-end functionality as well as client side UI part. I found the way how to effectively utilize Linq2Sql to interact with entities generated by CodeFluent Entities. It allowed us to develop functionality faster, make code testable and use TDD approach. I have deeply studied the CodeFluent Entities framework so I was able to consult other team members on its usage.
Responsibilities
Design, development and code review
Achievements
Shipped betha version of the product on time
Significantly improved my knowledge in TDD
Got experience in using isolation frameworks such as Moq
Familiarized with JavaScript, jQuery and jQuery UI components
Got experience in construction of dynamic HML pages using JavaScript and AJAX-request
Technologies
ASP. NET MVC
C#
JavaScript
jQuery
Linq2sql
Microsoft Visual Studio .NET 2008
MigraDoc PdfSharp
NUnit
SoftFluent CodeFluent Entities
Unity
Windows
Senior Software Development Engineer Team Lead
September 2008 - August 2010
Client/Server architecture based system for Lifecycle Management of software for IBM iSeries, IBM AIX and Linux platforms. With client components for MS Windows platform, MS Visual Studio and eclipse IDEs. The software was build using three-tier architecture with custom middle-tier component. Persistence layer uses IBM DB2 for OS/400 and Linux. I took the position of team lead, but continued to design server-side components, as well as support for existing components and fixing bugs. And of course I continued to re-factor legacy code making it cleaner guided by the Boy Scouts rule. In the past six months, I informally took the position of SCRUM Master. I organized SCRUM process locally and effective communication with foreign SCRUM teams. Due to the growth of the project and neglecting the possible growth at the beginning, there was a problem with lack of space for export symbols in service programs (things like shared objects or DLL). I applied Dependency Inversion principle and implemented some sort of Inversion of Control container. It solved the problem, it also decoupled interrelated components and speeded up development on iSeries environment. On this project I personally seen the growth of our team. And it was really sad when the team was disbanded due to lack of projects.
Responsibilities
Project management
Technical leadership
Code review
Development and bug-fixing
Achievements
We finished the project with empty list of defectse
We built perfect team
Technologies
boost
C++
COM
CppUnit
cygwin
DB2
eclipse
IBM iSeries Access for Windows
MFC
Microsoft Visual Studio .NET 200x
OS/400
OS/400 iSeries QShell
putty
SlickEdit
STL
Windows
WinSCP
Senior Software Development Engineer Tech Lead
January 2007 - September 2008
Client/Server architecture based system for Lifecycle Management of software for IBM iSeries, IBM AIX and Linux platforms. With client components for MS Windows platform, MS Visual Studio and eclipse IDEs. The software was build using three-tier architecture with custom middle-tier component. Persistence layer uses IBM DB2 for OS/400 and Linux. I participated in the development of all new components of the server-side part of the software. I supervised all stages of developing of these components. The project required maintenance of legacy code. A lot of legacy code was refactored by me personally. I introduced practice of unit testing. I've got a wealth of experience in the support and development of large enterprise-level software projects. We started with new functionality had to be integrated to the existing system. There was a constraint that we must avoid nested SQL queries. I devised a set of generic components for retrieving complex and interrelated objects from the database without their full materialization. This allowed to reduce nested SQL queries and use of STL algorithms for manipulation of these objects. This also increased overall performance. I have introduced a practice of unit testing on the product, which allowed to simplify refactoring of legacy areas. The build process on iSeries was taking much time. So, to alleviate and speed up the maintenance and refactoring I have wrote scripts for the make utility to incrementally build the system.
Responsibilities
Technical leadership
Code review
Development and bug-fixing
Achievements
Successfully built up the team and set it up to speed
Got experience in support and development of large enterprise-level software projects
Technologies
boost
C++
COM
CppUnit
cygwin
DB2
eclipse
IBM iSeries Access for Windows
MFC
Microsoft Visual Studio .NET 200x
OS/400
OS/400 iSeries QShell
putty
SlickEdit
STL
Windows
WinSCP
Senior Software Development Engineer Technical Consultant
September 2008 - October 2008
Lohika
Facebook toolbar for Microsoft Internet Explorer
A clone of Facebook's Toolbar for Mozilla Firefox. The software consists of plug-in for IE and COM server which acts as mediator. The IE runs its tabs in different threads and the user can run several IE instances. So, there was a serious architectural decision on how to organize interaction between the toolbars residing on the tabs and allow them access to the shared state. We used separate out-process COM server which holds the state and interacts with Facebook's services. We also implemented the proxy classes to allow the tabs interact with the COM server smoothly without worry about multi-threading. It sounds arrogant, but the POC, design of the component and the first delivery was made completely by me. After this project Lohika used all the source code in other similar projects.
Responsibilities
Preliminary design and planning
Implementation of basic components
Support further development
Achievements
Successfully released alpha version of the product
Technologies
ATL
C++
COM
STL
Windows
WTL
Senior Software Development Engineer
January 2006 - January 2007
Lohika
Seriosity Attent (Carbon)
Email Management Software Solution for Enterprise. Client application for interaction with Seriosity's HTTPS server. I was responsible for bugs fixing and improvements in Client Desktop Application – COM server which works on user's workstation and provide COM interface for interaction between mail software(Outlook) and Seriosity's HTTPS server and displays useful information in dashboard window (user's account status, recipients status etc.). I organized effective process of knowledge transfer from previous development team. This allowed us to start contribute to the project from the first days. I re-factored code of COM server which resulted in its robustness and maintainability without bringing regressions to existing functionality.
Responsibilities
Improvements of the code base
Bugs fixing
Achievements
Successfully released betha version of the product
Technologies
ATL
C++
COM
MFC
Microsoft Visual Studio .NET 2008
STL
Win32 API
Windows
Senior Software Development Engineer Team Lead
November 2005 - January 2006
RoboBAT
RCAD Steel
Part of "Robot Office" which consist of: Robot, RCAD Steel, RCAD concrete, RCAD Formworks, ESOP, CBSPro. The CAD Software for Civil Engineering. This Software built on AutoDesk's ObjectARX technology and uses AutoCAD engine. Designed to support whole process of structure modeling and drawings preparation. The main purpose of it is automatic preparation of drawings for models of steel constructions. Also it uses bi-directional integration (via COM) with calculation software for support of whole cycle of buildings design. I took position of Team Lead after long period of work on the project as software engineer. I developed core models of steel structure parts. I designed and implemented general mechanism for making 2D drawings from 3D construction model. I developed and implemented sophisticated algorithm and components for search similar solid elements in the model of steel structures. As my own initiative, I developed a template-based library to facilitate the development of ObjectARX applications.
Responsibilities
Coordination of development process
Time cost calculations for new features
Design, implementation and support of core-level components
Achievements
Successfully released several versions of the product on time
Technologies
AutoCAD 2002/2004/2006
AutoDesk AsdkModeler
AutoDesk ObjectARX
C++
MFC
Microsoft Project
Microsoft SourceSafe
Microsoft Visual C++ 6.0/7.0
Rational Rose
Robot Open Standard
Spacial ACIS Modeler
STL
TestTrack
Win32 API
Windows
Senior Software Development Engineer
September 2005 - November 2005
Client-Server software to create, manage and share photo albums with other people via Internet. I fixed defects on back-end side and developed several UI features. This was my first experience with .NET. Since it was part-time job, I got experience of simultaneous work in two teams working on a completely different projects with use of completely different technologies. I was convinced that I have good communication skills in team.
Responsibilities
Bugs fixing and improvements of the code-base
Achievements
Successfully released betha version of the product on time
Technologies
Windows
C#
.NET
Microsoft Visual Studio .NET 2003
Senior Software Development Engineer Team Lead
November 2004 - December 2004
EMT Russia
EDT:Specification
Application based on AutoDesk's Architectural Desktop 2004 platform for creating and editing room finishing specifications according to the Russian all-Union State Standard.
Responsibilities
Requirements engineering
Design and implementation of whole application
Team management
Achievements
Successfully released the product
Got experience in managing very small team and in close communication with the customer
Got expereince in other AutoDesks's product which uses ObjectARX technology
Technologies
ATL
AutoDesk ObjectARX
C++
COM
Microsoft Visual Studio .NET 2001
STL
Windows
Software Development Engineer
April 1999 - September 2005
RoboBAT
RCAD Steel
Part of "Robot Office" which consist of: Robot, RCAD Steel, RCAD concrete, RCAD Formworks, ESOP, CBSPro. The CAD Software for Civil Engineering. This Software built on AutoDesk's ObjectARX technology and uses AutoCAD engine. Designed to support whole process of structure modeling and drawings preparation. The main purpose of it is automatic preparation of drawings for models of steel constructions. Also it uses bi-directional integration (via COM) with calculation software for support of whole cycle of buildings design. It was a green field project. On the first stages of the product we used Borland C++ Builder and VCL as a main platform. The ObjectARX library and our custom objects were build with Microsoft Visual C++ run-time library. I have implemented object API layer to use the ObjectARX stuff in application build with Borland C++ Builder and to host the application inside AutoCAD. On this project I have thoroughly studied the AutoCAD ObjectARX library and was a mentor in ObjectARX for the rest of the team. I've got wealth of experience in using AutoCAD as a tool for drawings. Developed set of product features. The project showed me that I have the ability to quickly learn frameworks.
Responsibilities
Design, implementation and support of core-level components
Achievements
Successfully released several versions of the product on time
Learned the principles of solid modeling
Learned AutoCAD ObjectARX framework
Learned basics of AutoCAD
Technologies
AutoCAD 2000/2002
AutoDesk AsdkModeler
AutoDesk ObjectARX
Borland C++ Builder
C++
MFC
Microsoft Project
Microsoft SourceSafe
Microsoft Visual C++ 6.0
Rational Rose
Robot Open Standard
Spacial ACIS Modeler
STL
TestTrack
VCL
Win32 API
Windows
Software Development Engineer
February 1997 - December 1998
The desktop software for calculation, registration and management of radio broadcasting systems (according to electromagnetic compatibility and other technical parameters) for whole Ukraine, with preparation of accompanying forms, their storage and distribution.
Responsibilities
Implementation of user interface components
Achievements
Successfully released the product
Got experience in managing very small team and in close communication with the customer
Technologies
Borland C++ Builder
Borland Delphi
C++
COM
MFC
Microsoft SQL Server
Microsoft Visual C++
VCL
Win32 API
Windows
Certificates & Trainings
Test Driven Development and Refactoring with Robert Martin (Skills matter, London, October 2013)
Test Driven Development training by Roy Osherove
Online Model Thinking course (www.coursera.org/course/modelthinking) offered by University of Michigan. (scored above 90%)
Online Machine Learning course (ml-class.org) offered by Stanford University. (score 880 out of maximum 880)
Online Online Introduction to Databases course (db-class.org) offered by Stanford University. (score308 out of maximum 323)
Online CS101 course (cs101-class.org) offered by Stanford University.
L.E.A.D. - 5 days training from Bright Leadership (www.brightleadership.com)
Brainbench "OO Design Patterns", 4.01 (master), 2006-05-17.
Brainbench "C++", 4.45, 2006-05-18.
Brainbench "OO Concepts", 3.81, 2006-05-18.
Brainbench "Unified Modeling Language (UML)", 3.56, 2006-05-25.
Brainbench "Windows Application Program Interface" , 4.14 (master), 2006-05-26.
Brainbench "C++", 3.49, 2004-07-13.
Brainbench "C++ Fundamentals", 4.25 (master), 2004-07-14.
Brainbench "OO Concepts", 3.36, 2004-07-14.
Qualcomm CDMA training course. General Overview of Qualcomm CDMA System.
Qualcomm CDMA training course. QCELL 2508i Operation and Maintenance.