My name is Andreas Schwarzkopf and i am a professional software developer located in the Rhine-Main metropolitan area in germany.
I live in Hanau and regularly commute to Frankfurt am Main, where i currently work for ioki,
a DB company, on a thriving, sustainable and innovative mobility project. My current position is 'Head of Backend Engineering'
and i have the honor to work in a setup where multiple strong scrum teams create an awesome software product and everyone contributes and learns as we proceed.
I also run a business, where i develop the cloud based multitenancy web
app ChurchCurator, a collaboration and management software
for volunteers and churches. I do no longer offer standard development services for customers.
However i still assess projects, give architectural consultancy services and coach teams and project managers.
I might offer working on code, if the problem domain is sufficiently demanding and interesting or if you can enthrall me - databases or complex algorithms might be candidates.
Finally i usually mentor one or two developers or young professionals.
I am truly excited about my profession; i think the IT world is the most awesome to work in.
From a technological point of view i worked mostly as a Full-Stack-Web-Application-Engineer. As a developer i
focus on software architecture, scaling, algorithms and a sound codebase as the foundation of a real world product.
My current toolset mostly revolves around Ruby on Rails backed by a PostgreSQL database. I usually find myself more on
the backend side and i like the algorithmic parts best. I've fallen in love with PostgreSQL over the last years and i
generally admire the power of databases. Speed, scaling, databases, C extensions, stored procedures - this stuff keeps thrilling me.
But there's more about software that makes me love my trade.
There's architecture, which involves topics from design patterns to IT infrastructure, from composition to orchestration, from theoretical requirement analysis back to hands on development. And then there is the development process itself, which is a real big thing: On one hand it is about working in a team with great people following best practices and on the other hand it is about your personal development and your ability to solve problems. While the team always plays an important role, you still often depend on yourself and your skills. It is all about self organization, endurance, the ability to work diligently on a topic, understanding your tools as well as the problem domain, making sound and sustainable decisions, breaking down problems and ultimately it is about finding feasible solutions.
Finally there is the project with so many facettes: All processes and prerequisites that are needed to succeed. Choosing the right technologies and tools. Understanding the business domain. Estimating time and budget. Hiring and developing people. Making architectural decisions. Requirements Engineering. Leading formally and informally. And the actual project management itself. Bringing a large software project to life is an adventure and i am passionate to learn so much more.
It is about making all the external and internal conditions fit - a great team, with an agile attitude, a visionary leader, the best tools money can buy, self discipline, the hunger and skillset to get the job done. When everything fits together, the rewarding result is a great software product.
I was born in 1982 and at the age of 12 my dad bought me a personal computer. It was an Intel 80286 - and the world changed forever. I "entered the game" another 2 years later: Writing code in Basic and Pascal. DOS died; Windows came. I heard the sound of dial up connections, learned HTML, surfed the NetscapeNavigator at its peak in 1996 and learned JavaScript. I actually earned some really good money working at an early web agency - transforming templates into websites day and night. During the whole "dot com bubble" i still earned my money with web programming, i witnessed AJAX being born, Flash peaking and dying, and JavaScript being revived.
During the late 90s i gradually became a solid programmer: I did all types of interpreted and compiled Basic dialects up to Visual Basic, worked with Assembler, with C and from Pascal to Delphi. At the age of 17 i finally wrote a two component client/server freight planning software for a logistic company in Delphi - and i felt satisfied when this software was actually used by real people. I learned what it felt like to "ship software" and decided to start a solid IT career.
After highschool i started studying computer science at the university of Darmstadt.
My studies took place from 2003 until 2010. I added Java to my toolbox, but most
working hours were spent with PHP 3 to 5.
I developed something really cool, which did not have a name back then. I used it to
edit content of webpages dynamically. I worked really hard on it for over 2 years.
When Typo and Wordpress flooded the marked i learned that such a thing was actually
called a CMS and i recognized that Wikipedia will never list me as the inventor.
But i can cope with that as i still value the time i worked on this project and for
myself i consider this to be a true invention - i was just a bit too late.
It was then when i realized that my coding skills had to become better and it was then
when i learned about things like software patterns.
During the main study period i focussed on three things:
Another thing i learned in those days was the fact that learning a language is not as
hard as learning frameworks. I was skilled in C++ and in Delphi but it took me weeks
to figure out how OpenGL worked. There were bindings for C++ and Delphi but the
framework took way more time to understand and explore.
And there was another dimension to writing purposeful software:
Writing a game engine involved some serious math. I realized that for real world problems
the language and the frameworks are the tools, but it can sometimes be much harder to truly
understand the problem domain. Granted, most of the times you need only the basics of your
skillset.
But writing outstanding software is more than plugging preexisting components together.
At some point you need to solve something on your own.
I have a very special opinion on what a senior developer is and in addition to all the
common aspects i have a strong emphasize on the ability to create something truly new
for your problem domain. So i learned that many skilled programmers called themself
senior developer, but some were more equal than others.
I also worked two years for Lexmark Germany during my studies. All these experiences
led me into the direction of pure software development and contributed to my interest
in algorithms, data structures, complexity analysis and filled my mathematical toolbox.
At the same time i had gained insight in academic, governmental and enterprise working
situations.
At the end of 2010 i left university and joined flinc, a small, visionary
start up developing a ride sharing platform. I learned Ruby and became a seasoned
Ruby on Rails programmer. During the next years i had the privilege to work with
great people.
My current journey in software development is not centered around languages or frameworks anymore.
Learning a language is a matter of hours to days; likewise Frameworks a matter of weeks up to months.
Also, the problem domain as well is not my primary focus: I have worked through some tough domains already.
My personal focus is on architecture and the actual development process.
It is centered around the question what it actually needs to get a product finished with as least dependencies as possible.
What it takes to build strong teams. Hiring the right people, using the best tools available, investing in growth.
Good software is developed by smart individuals, having bright ideas, strong teams with a clear vision and within sound organizational structures.
This is why i - over 20 years later - still work hands on developing software and leading teams to success.
It's just fascinating for me when creativity, knowledge, will and time are poured in a project and working software emerges.