My core expertise from over 15 years working in development and managing roles consist of
The main benefits I provide come from
For over fifteen years I have been responsible for ensuring success of software development efforts, either as a Software Architect, Developer, Scrum Master, Team Lead or Project Manager. Coming from an academic background in Computer Science and Computational Linguistics, I have been working on healthcare information systems, content management systems, eCommerce systems, intelligent search and natural language processing projects, usually from design to running a system in production. I love working in teams which take responsibility from requirements to flawless operation.
As a Scrum Master or Team Manager, I try to help my team by taking care of organizational roadblocks but get out of the way otherwise, regardless of whether the team consists mostly of internal developers or outsourced external suppliers. I also often support the business with formulating a project vision, defining requirements and setting priorities.
I have significant experierence working in international distributed setups. Working on interesting topics on projects that make a difference is what I want to do, and if this involves working with people and taking responsibility, all the better.
I first learned about agile in 2007 with Extreme Programming (XP) and have so far not found a better way of working. I have been serving as the Scrum Master for various teams since 2009. I know how to run retrospectives that will help teams to uncover better ways of working and how to use very low-tech solutions to visualize progress. Multiple times I introduced teams to Scrum and to the ideas in the agile manifesto. I have experience in multi-team settings and have applied ideas of SAFe (the Scaled Agile Framework) and Less (Large Scale Scrum) to improve the collaboration.
I've written several articles on agile topics in my blog.
For more than five years I have been the manager for cross-functional international teams consisting of developers, testers, product owners and scrum masters. I know how to help people grow, how to have tough conversations when necessary, how to make teams successful and how to identify good candidates for a team.
Since 2002 I am used to manage projects, from defining project vision and requirements engineering over work breakdown to cost controlling and status reporting. I am used to work both with internal teams and external suppliers, including work on contracts.
In my experience, the difference between programming and software engineering is that the former is about typing away to get the problem solved and the latter is about understanding the problem first and then thinking about how to solve the problem within the given constraints. My goal is to find simple solutions (not necessarily easy solutions), i.e. solutions that are not complex which benefits long term maintainability. Thinking a little about the design of a piece of code usually already outclasses jumping into coding, without requiring the big design upfront.
I am a Certified Professional for Software Architecture (Foundation Level), but more relevant is the personal experience gained from working on the architecture of systems in practice. I take an agile approach to define the architecture of a system with the responsible team and make sure that quality aspects such as scalability, security and maintainability get as much attention as the functional requirements.
Low-effort ways to document decisions and designs like Architecture Decision Records, Arc42 or the C4 model are in my experience more useful than highly formalized approaches to documentation.
The Clean Code and Software Craftmanship movements with their focus on code quality and maintainability are important to me. Practising test-driven development, pair programming and code reviews are good ways to align the developers in a team.
Programs must be written for people to read, and only incidentally for machines to execute.
-- Harold Abelson, Structure and Interpretation of Computer Programs
I prefer working with functional, dynamically typed programming languages like Clojure and Common Lisp. The power of a Read-Eval-Print-Loop (REPL) allows quick and easy experiments to drive solutions without having to wait for the dreaded compile-run-debug cycle to complete. Immutability prevents a big pile of problems that plague most systems today.
I started working with OOP in the early nineties. I have working experience in Python, Java and Javascript. Although I currently don't use any of them on a daily basis, I'm open to develop with either language.
I've seen and worked with many other languages, too, some of which were pleasant to work with (e.g. Perl or Ruby), some not so much. I am not keen on working with PHP, Basic, C++ or C#.
The tools I use the most are probably my ears, my brain, my voice and then the whiteboard and the flipchart, together with sticky notes.
The following list below is not conclusive but only contains items which I feel relevant. I worked with considerably more programming languages and tools and am comfortable to pick up more quickly as needed.
Dependency Management in Clojure, 2016, presented at ClojureD, Berlin. (video).
Funsig, a Clojure library to handle dependency injection
clj-tfidf, a Clojure library for TF-IDF analysis of texts
mediacopy, a Python CLI app to copy media files
.Cohesion in Coherent Technical Texts, 2003, Dissertation at the University of Freiburg, Germany
Anaphoric Cues for Coherence Relations, co-authored with Udo Hahn, presented at RANLP 2001, "Recent Advances in Natural Language Processing"
Phrases as Carriers of Coherence Relations, co-authored with Udo Hahn, presented at CogSci 2000
.I prefer being contacted by email, but feel free to follow me on Mastodon.
Dr. Holger Schauer