What do I sell as a software development consultant?

I am a geek. A coder. A software development consultant.

I’ve worked in the information technology business almost my whole adult life in different professional service firms. But my mind still boggles when I try to tell a good story about all the different things that go into making great things, keeping those things running while letting people keep their sanity.

This post is about how I think I can contribute to making things better - and what are the things that I currently study, to improve my capabilities to improve those working environments where we create code but also so much else.

So should you want to hire me into your projects, please read along.

I love solving problems and doing programming work is one of those professions, where you get to do it almost daily. Between some mundane tasks and yak shaving being a programmer gives you a constant stream of problems to solve.

But programming - the act of doing the actual code, writing it into a format that a machine can compile and run it - is just a minuscule part of the whole chain of activities in our problem-solving. And depending on how we see the whole problem-solving process and flow of information, we can make hugely different decisions also in programming activities and organize ourselves differently to be more effective.

And this brings us to things that interest me professionally.

These are the topics in which I hope I could make an impact and help us to become more effective.

  1. Development processes and leadership

  2. Infrastructure and tooling to support the development

  3. Architecture - patterns, practices, and ecosystems

  4. Software development in JVM ecosystem

There is no way I could ever be an in-depth specialist in all of those areas. But being sufficiently aware of developments and real improvement opportunities in each one of those allows me to pull insights into daily practice and know that I could get help from subject area experts when needed.

But what do those 4 topics mean - in more concrete terms.

Development processes and leadership

As W. Edwards Deming apparently stated, a bad system will beat a good person every time. It does not matter if we have the best hackers and programmers in the world at our disposal if the process how we do our work does not allow them to work effectively.

And it does not matter if we gain improvements in our development pipeline and processes if we are building fundamentally the wrong thing. Building the wrong thing faster is not a solution.

What things are so unchartered that we should do heavy custom development from scratch, where should we use products or platforms as the base and when should we outsource the work to an industrialized service. How could we map the value chain and these decisions together.

What are the tools, methods, and principles - by which we can improve our sense-making and increase the speed of learning. How can we instrument our software to provide us with fresh data and observability into what users are doing and what is happening in our product, so that we can make better decisions and test our assumptions faster.

How can we divide our problems into smaller pieces that can then we worked on parallel if needed - and how our technical decisions and solutions can enable or hinder those goals.

There is a plethora of methods and ideas available on how to model and process these questions, but from where to start, which ones to use and why?

I want to help to answer those questions and make informed decisions. My goal is to continue to be a sufficiently capable advisor in this topic so that I can work well with other coaches, and help teams to make sense and take steps into improving the system they work in.

Increase the flow of ideas and speed of learning, rinse and repeat. And have fun while doing it..

Infrastructure and tooling to support the development

It is still a few steps away from the act of programming the value adding feature with new code into a product or service, but elemental on enabling teams to work effectively. DevOps movement and cloud computing have transformed how we think about the topic.

Development going on in infrastructure components and services, as well as value-adding SaaS-services, make this a constantly moving target. New tools and platforms allow us to change our abstractions and how we model our solutions. Instead of just hugging and managing servers or application servers, we can deploy containers or functions into managed service platforms in the cloud or in the data center.

New platforms and managed services have disrupted costs of developing and running resilient and elastic world class services. All these changes have implications to how we make code and what the processes should look like. What frameworks and languages work well in the selected environment and how should we model our applications for that deployment target. What kind of checks and controls should we have in our development and operations, and which ones we could automate easily.

I tend to stay on top of how the domain is changing, what different options are available and how different solutions make a business impact. I want to be able to help teams to take steps in the right direction, but for the heavy lifting, I will always resort to the help of specialized devops engineers.

Architecture - patterns, practices, and ecosystems

I’m interested in understanding the big picture. How and why things work together, where does the structure come from and how does it serve the purpose. I still get interested in new paradigms, technologies, and languages, but always try to identify how and where this technology would have a significant business impact over other already well-known solutions.

Decisions on software architecture, patterns used - as well as sometimes decisions on languages and component ecosystems selected have long-term impacts on the project and business’s success. To make educated guesses about the future architecture, you need to understand how each decision impacts options available to you down the road. In any case, what you start with, will evolve in time to something else. It always does.

Good architectural characteristics are defined based on the requirements of the business, organization and the environment. What is good for someone else in one domain, might not be the best solution for you. In the end, good architecture is less about a specific flavor of technology than creating structures which allow the evolution of the use of technologies to fulfill the needs of the business.

My goal is to be an excellent architect who can facilitate alignment within an organization. I can help bring together viewpoints from the business and technology - and ensure the architecture represents the best-shared understanding of what serves the needs of the business now and in the near future.

Software development in JVM ecosystem

I am highly biased towards JVM ecosystem with a dash of Python sprinkled in places where JVM does not make sense. Even though I play around use or hack programs written in other languages and ecosystems, for serious work I’ve always come back to java-ecosystem for its breadth and depth.

Though I love functional thinking and solving problems in Clojure, there are projects and reasons where Clojure does not make sense. Then my go to stack consists of Spring Boot, components from other Spring Framework projects and Kotlin or Java as the language. It is a blue-collar stack, but versatile and adaptable to many enterprise application development needs.

This bias does not prevent me from adopting and becoming proficient in other languages and stacks if existing projects I get to work with are built with something else - even if it means Node and Mongo DB. After all the selected language and software stack is just one part of the big picture on how we solve problems. But JVM ecosystem is the place where I have spent most of my developer time - and feel at home.

My goal as a developer is to be as lazy as possible and treat code as a liability. The code I write should communicate to humans who need to read it, not just machines - and if I can avoid writing own custom code, I’ll do it. Unless writing it will be fun. We are humans after all.

So what do you get when you work with me?

I think I am and can be a good collaborator in many projects.

I am a jack of many trades who wants to improve the effectiveness of software development.

I am a generalist who can help glue teams together by bridging different disciplines and viewpoints together and help the whole team to get to a better place.