This blog is mostly a work of passion; it doesn't pay my bills. Since late 2011 I've been self-employed, so I'm available for hire. Here's what I can do for you:
- Custom software development. I love writing code, so obviously, I'd also like writing code for you; small or big tasks - it doesn't really matter. I can work in a team, or by myself, as necessary, but I have a strong preference for remote work. These days, I prefer Haskell and F#, but I'd also be interested in working with other platforms or languages (particularly PureScript or Idris), but I'd first need to ramp up on those.
- Software architecture. Apart from experience with nitty-gritty coding details, I also have years of experience with application architecture, including REST, SOA, batch systems, etc. If you need help with the big picture, I may be able to help as well.
- Functional programming migration. Get help migrating code from C# to F#, from F# to Haskell, or perhaps directly from C# to Haskell. This will include not only translation of keywords, but redesign to a more functional architecture. While I'd probably consider it unethical, I also possess the skills to help you migrate from Haskell or F# to C#.
- Sparring. If you need to improve your skills in e.g. Test-Driven Development, API design, refactoring, Unit Testing, Functional Programming, Object-Oriented Design, etc. I can pair with you, or otherwise join you with the purpose of transferring knowledge and experience while solving real problems.
- Development process. During my career, I've experienced a wide range of development processes, including LEAN Software Development, SCRUM, Open Source development, MSF, and even RUP. I've been doing Test-Driven Development since 2003, and also have experience with Continuous Integration, Continuous Delivery, Git, and GitHub workflows. If you need help with your development process, I may be able to coach you.
- Code reviews. If you want me to review your code, I'll be happy to do so. Usually, I tell my customers that they should start by running a code analysis tool (like the built-in Code Analysis feature in Visual Studio), because it's free, and you get more value out of my code reviews if you already get the obvious issues out of the way before I start looking at the code. I particularly look for issues relating to readability, encapsulation, coupling, maintainability, etc.
Training. I regularly talk at conferences, but I can also visit your company to deliver lectures and workshops. You are welcome to take a look at my schedule to get an idea about current and past topics, but feel free to contact me to discuss topics; I can most likely tailor something that fits your requirements. Apart from tailored training, I also have a small catalogue of off-the-shelf workshops:
- Property Based Testing. Learn a new way to test your software. A day with either F# and FsCheck or Haskell and QuickCheck, and lots of hands-on exercises.
- Unit testing and TDD. Over the years, I've hosted several half-day and full-day workshops on unit testing and Test Driven Development. I have so much material on this subject in C# or F# that I can probably put something together to your liking.
- Code That Fits in Your Head. A workshop based on my book by the same name, containing eight modules that sample practices from the book and provide some hands-on exercises.
- Round table. Sometimes people simply want to have a meeting with me to discuss various topics - typically Test-Driven Development, software design, architecture, and the like. I'm happy to visit you for a meeting with you and your team, where we can discuss your questions, sketch together on a whiteboard, look at code examples, etc., in an ad hoc fashion.
During my time as an independent expert, I've worked for a variety of customers, some of whom have been kind enough to share their experiences with the world:
"We invited Mark to a two-day workshop about "Code that fits in your head". Mark’s unique ability to condense his experience into a set of practical, pragmatic techniques for writing sustainable and human-friendly code was an extremely valuable experience for our developers. One of them wrote:
"Mark's workshop planted a lot of good seeds in my mind on several topics coming into play with fun exercises where you see the power of different software concepts working well together. I very much enjoyed seeing how writing code with pure functions can help us reduce the cyclomatic complexity and shape code into something that actually "fits in your head". I found useful to learn about the strangler pattern and I know I could have used it on several tasks I developed. The parallel between mocks vs. fakes was also very interesting and I found the exercise there extremely smooth. The exercise on using "git bisect" when troubleshooting was fun as well. All in all, the seminar has walked me through several concepts I found cool, and I am looking forward to integrating them in my daily work."
"Mark is, without question, the most competent software engineer I have ever worked with [… He] really has profound knowledge of the entire cycle of software development - from requirements gathering over design and technology choices, right down to all the details that comprises an actual implementation, so if you find yourself having the need to develop enterprise-grade rock-solid software, Mark should be right there at the top of your to-hire list."
"Mark inspired all our developers with a solid and fun introduction to Software Craftsmanship. He has a special gift for addressing developers - I think it's because he really knows his stuff deep down in the code, but still manages to make high level concepts understandable.
"He is passionate about what really matters, and therefore presents clearly and interestingly - sometimes even with surprising viewpoints that push you in a new and better direction."
"We invited Mark to a presentation of F# and how its type system can concisely model a problem domain, as part of Schantz' ongoing developer training. Mark is a terrific speaker who is able to convey highly technical subject matter in an understandable and entertaining manner, and his presentation inspired us to further explore how we can best express the domain models in our applications."
"In March 2013, we asked Mark to help us out with several TDD related issues we were having. We were pleasantly surprised by Mark's ability to provide us bespoke answers and bring a seasoned perspective. To any team, either struggling or wishing to hone their skills, I can highly recommend Mark's services. If you ever read a post on his blog or worked with one of his open source projects, this is the quality you're getting in-person."
"While rewriting a major internal application, we approached Mark to conduct a few code reviews for us. We were new to DI and our development team had recently finished his book. The team agreed some extra assistance was needed. Mark's approach to code reviews was completely different than anything we had experienced in the past. We were expecting a fact checker along with a few suggestions, but were delighted to receive a computer science professor, as well as a depth of knowledge and experience unrivaled by previous reviewers. Our time with Mark was an exceptional educational experience for the entire team. Mark gave us feedback throughout the day. The reviews were so insightful that we had developers voluntarily arriving at 6 A.M. to listen and interact with Mark. Our team wholeheartedly endorses Mark. His expert service provides tremendous value."
"Mark created a software craftsmanship education plan for our more than 60 developers and produced the content for the first education module, which he also taught. The entire plan has been very well received by our developers, with feedback such as:
- 'Mark is an excellent presenter. Good examples and theory was well explained.'
- 'Mark is very inspiring.'"
Practical issues #
If you are interested in hiring me, then please contact me. While I'm based in Copenhagen, Denmark, I can travel to you if necessary, as long as I don't have to stay away from my family for too long; in this case, you'll need to cover my travel expenses as well, although I sometimes include that in a fixed price offer. Collaboration over the internet is obviously a less expensive alternative.
Usually I charge by the hour, but sometimes (e.g. for training) I can also give you a fixed price offer. My prices are high - expect to pay more than you would normally pay for a development consultant, but slightly less than a licensed lawyer, accountant, management consultant, or similar. My price may vary with the nature and length of the assignment. Also depending on the nature of the task, I may ask for a retainer fee. Please contact me for details.