From: Poland
Location: Rąbień AB
On Useme since 22 January 2019
I’m Damian Sińczak, software engineer from Poland. I’m writing this letter to supplement my resume and tell a little bit more about myself, my career, what I do and what I value
Since the beginning of my professional work as software engineer I had a pleasure to work for a few companies and see many business domains and technologies. I started as junior java developer at Comarch company (the biggest Polish owned company) where, from the same beginning, I started to work for Nokia project (Nokia Life Tools). We (3 developers) first got a small billing module adapter (between NLT application and two main Indonesia mobile operators). I was responsible for development and in the end for onsite deployment and support. This was a fantastic opportunity to work abroad for some time and meet great people. After that Nokia gave us full development over whole NLT product. I was responsible for billing part from analysis through architecture up to development, testing and deployment. This project was a challenge and required a lot of traveling, because product was deployed in many countries, but also gave me opportunity to work with many different people (from India, Indonesia, Nigeria, China, Finland) and see variety of technologies. After last deployment I’ve spend almost 4 months in India sharing knowledge about project with local Nokia branch employees. From technical point of view this project taught me a lot about asynchronous message processing and systems integration (every mobile operator was different and had different billing scheme and interfaces). This was the time I started to see value in test driven development and clean code, along with that I started to dig deeper into enterprise integration patters (mostly with the use of Apache Camel and EIP book by Gregor Hohpe and Bobby Woolf). Also, one of my interests at that point was aspect-oriented paradigm and its use with AspecJ in Java environment.
My next project was a mobile application for Comarchs Filed Service Management (https://www.comarch.pl/field-service-management/) application. Company gave me an opportunity to learn Android during working hours by creating proof of concept mobile application for FSM. It went so well that after few graphical and UX corrections we managed to present it to both customers that already had server version of FSM and new ones. Because I already had experience in requirements analysis from previous project I was also send few times (e.g. to Viasat Wildblue in Colorado) to analyze mobile product customizations required for customers. Specificity of the android environment thought me a lot, especially how important it is to separate technical code from business one to properly test and maintain both. This was also great lesson about application usability and how business rules implementation should not be affected by UI flow. This was the time I started to put my interest in good design practices, especially onion architecture was one of my main interests. I was (and I still am) sure that well designed domain is the key.
After 5 years in Comarch I decided I need to see more of the market, some other domains, other architectures and development tools. I started to work for Cybercom (Swedish owned outsourcing company) which immediately send me to TomTom where I took part in big process of transition from TomTom main data source to new one which required rewrite of all their tools to use new data source (this was mostly data conversion from one format to another for different TomTom customers). This was my 2 years long adventure with big data. Project was based on Hadoop and Apache Crunch and big challenge from technological point of view. Learning map-reduce architecture, data distribution with HDSF and streaming with crunch took a long after work hours but was rewarding as this knowledge helped me later in other projects.
After my contract with TomTom ended I wanted to be a part of something bigger and opportunity came soon. Commerzbank wanted to open its IT department here in Łódź, Poland. They chose one of their own subsidiaries, Ceri International, located here in my hometown. My first responsibility was to start pilot project. We started with logistic application responsible for cash delivery to ATMs and bank branches. It was very old system (Java 6, Struts 1) with very strange type of architecture base on java beans and active record patters. Nothing was tested automatically and considering that this application was delivering more than billion euros to ATMs and bank branches yearly it was a demanding piece of software. I was responsible for planning changes and later architecture of whole solution. We managed to convince bank to start new application development and integration with old working one. To do so, we had to think of many integration schemes and use many mechanisms. We started to develop new application with the use of domain driven design approach. Whole analysis, design and later development was concentrated over domain and work with customer. We managed to work out projects language (glossary is not enough) and bounded contexts boundaries (this was the hardest part along with the language as the same things were something different in forecasting, billing, and order management contexts). We gathered enough knowledge to design aggregates and started development with use of standard technology stack: spring boot, hibernate and spring integration. We choose CQRS architecture along with onion architecture principles in mind. Integration with old system was one of the hardest things, implementation of anticorruption layer and assurance of transactions scopes (or in many cases eventual consistency through Saga patterns) took some time for experiments. The POC itself was successful and Commerzbank opened its biggest development department here in Łódź (currently its more than 150 people). During that time, I’ve learned a lot about software design and especially a lot about DDD and CQRS architecture, but something was telling me that standard enterprise tech stack is not enough (spring + hibernate). Having this in mind I started to learn about actor systems and event sourcing (which naturally lead me to Scala language and Akka framework).
Which led to my last but one employer, Idemia, (former Oberhur technologies) that just started Scala+Akka project here in Łódź (they took code base from their development branch in Manilla). The 2 years spent in this company were the most intensive time in my career. I was learning Scala and functional paradigm, Akka and actor-based approach to system design, Docker, Kubernetes and a lot of stuff about continuous integration and deployment. I was able to finally see DDD at its power. We managed to design aggregates and sagas as persistent actors. We also struggled with product API (that was changing rapidly and in original code was impacting domain code a lot) and managed use ports and adapters approach. During my time in Idemia I changed my view on parts of software development. I see the strengths and weaknesses of reactive programming. I started to favor functional programing over object oriented and see the power of immutability and functions which gave me some fresh view over my coding style in Java.