Services

I've been a consultant since early 2002. During the past 22 years, I've joined teams of all sizes to help them develop software for their customers.
My focus has always been on delivering value by infusing on the team the concept of code quality and fast feedback cycles.

I'm a strong believer in continuous improvement. I'm always on the lookout for new things to learn that will help me get better at what I do. Once I learn something, I love sharing that knowledge with others. In fact, I made teaching and mentoring my mission.

If you're part of a team of developers who is looking to improve their skills in one of these topics, I might be able to help. Here's what I can do for you.


Training

When you first approach a new topic, it's easy to feel overwhelmed by the sheer amount of information available to you. It's hard to know where to start. In those cases, the easiest way to jump-start your learning is it to have someone come in and point you in the right direction, help you separate the signal from the noise.

The best way for you to learn depends on your needs and how much you can fit in your schedule: it might be enough with just a 1 hour presentation (maybe combined with a breakfast seminar or during lunch break) or you may want to have a full-day workshop. I deliver both kinds of training on any of the topics I specialize in.

If you want to get a sense for my areas of expertise and my teaching style, you're welcome to head over to the speaking page and have a look at some of my previous presentations.

If you're interested in having me for a full day of training, you're welcome to check out my current workshops and see if you can find something that suits your needs.


Mentoring

Traditional classroom training is a great way to get you started on a topic but it can only get you so far. Once the workshop is over, it's up to you to continue your journey by finding new ways to learn. Being in training also means being away from your project. This alone can seriously limit the amount of time you are able to invest.

So, here's my idea:

What if, instead of choosing between training and productivity, you could have both.

How? By having me join your team for a while. During that time, I'll be actively working on your project while, at the same time, I'll be coaching the rest of the team in the topics you care about. I call this teaching by doing — I'll teach you how to do something by actually doing it together with you.

In my experience, this is the form of learning with the longest impact, giving teams the best chance to grow and actually change the way they work.

My role on the team doesn't have to be fixed. I've worked on client projects building business applications for more than 22 years. The majority of these applications were built on the Microsoft .NET platform but there were times when I would use Java instead. In recent years, I've focused a lot on building REST APIs using ASP.NET consumed by HTML/JavaScript frontends.
I've also specialized in building and maintaining a Continuous Delivery environment, both on Windows as well as on Linux. If your team has a DevOps culture, that's an even better match in my book.


Consulting

If all you need is a bit of advice, I'll be happy to assist you with traditional consulting. To give you an idea of what I can do for you, here are some of the projects I've helped my customers with:

  • Choosing an architecture for a new project
  • Assessing and improving the quality of an existing code base
  • Establishing a culture of peer review by leaving feedback through Pull Requests
  • Setting up a deployment pipeline from scratch and helping establish Continuous Delivery as a standard practice within the organization
  • Improving the current Release Management workflow with things like Semantic Versioning and choosing a branching strategy
  • Getting started with Test-driven development, including how to write good tests
  • Using Git to improve the way the team collaborates by evaluating and choosing an appropriate workflow
  • Migrating the history of a code base from [Subversion, TFS, Mercurial, Bazaar] to Git

These assignments typically take the form of dedicated workshop days where we walk through the task at hand together. Depending on the scope and complexity of the project, these sessions can either be held in person, remotely or a little bit of both. Of course, you can also choose to have me on your team for longer assignments.


Expertise

Regardless of how you choose to improve your skills, here's the list of topics I specialize in and will gladly help you with.

  • Git and how to work with it in a team
  • Object-oriented design and architecture
  • Designing RESTful APIs
  • Developing web applications on the .NET Framework or .NET Core with C#
  • Implementing and maintaining a deployment pipeline
  • Writing readable and maintainable automated tests with C# or Java
  • Test-driven development, again with C# or Java
  • Code reviews and how to make them part of your development process

If you're interested in learning or improving your knowledge in one of these areas, get in touch. You'll find my contact information below.


Testimonials

I always ask my clients for feedback throughout our collaboration. Once an assignment is over, I ask them if they're willing to share a testimonial. Here's what they had to say:

Enrico took on the responsibility for our web backend after a short handover. He has been able to resolve all issues and new requirements that we have thrown at him. He has with passion, knowledge and great enthusiasm supported our business and customers in an excellent way.
Enrico's passion for teaching and mentoring has given us a lot more than just his work done.

— Jonas Rylander, CTO, Skånska Byggvaror

At Alfa Laval, the Automation Development department used Bazaar to handle the source code. Bazaar has limited features, so we decided to have a better and more sustainable solution by using Team Foundation Server and Git.
Enrico and I worked together during two intensive days to find the perfect solution.
Enrico found how to migrate from Bazaar to Git while keeping the history and the version flags. He helped me structure the new repositories in Git to fit our needs by creating different branches. He also helped me create Git submodules in our application, to share parts of the code with different projects. This feature really improved our code development.
Enrico knows Git so well; when I have an idea, he helps me realise it in an effective manner.

— Edith Lesage, Automation Platform Expert, Alfa Laval

We had the pleasure of inviting Enrico to a conference. Enrico delivered a very professional presentation with passion and knowledge. No question went unanswered and all our developers, from the seasoned Git veteran to the beginner, were happy.

— Ola Randerz, Business Area Manager, Spectrum Digital Solutions

I've had the pleasure of holding a Meetup with Enrico Campidoglio.
Enrico's presentation was very clear. He took a "simple" but complex tool like Git and broke it down into smaller parts that made it easier to understand.
Enrico has a deep knowledge of Git and in general about source control, and is very accurate and thorough in his explanations. Something that is very important when your audience is experienced software developers.

— Philip Juhl, Product Owner at DevOps-Serviceteam, Jyske Bank

Contact

Do you want me to speak at your company or event? Are you interested in hiring me? If so, I'd love to hear from you. Here's a few different ways you can reach me.

Email

By far the easiest way to start a conversation with me is by sending off an email. The address is [email protected].

Twitter

Twitter is great if you just want to ping me about something specific. For example, you may have a burning question about Git and would like me to take a look at it. You can also DM me, if you prefer. My handle is @ecampidoglio.

LinkedIn

If you're on LinkedIn, you can always send me a message there. Here's a link to my public profile.

The image used at the top of this page is a modification based on a photo kindly licensed by the Techorama conference.