This is a pretty loaded term, and means a variety of things to different people. I mean it in 2 senses:
- I can build software from beginning to end: design the software, write back-end code, write front-end code, write & optimize queries, write tooling to manage the code, write tests, build the production environment, manage tests, manage deployment, and so on and so forth.
- I am a proud generalist. Chances are you can find people with more expertise in any one or two aspects of building a modern application that I listed above - and that's fine. There are very few people with as broad-ranging experience across the sum of those aspects as I have. I can have in-depth discussions about optimization trade-offs with both front-end developers and data-teams. I can build a great front-end experience and make sure that your containerized deployment plans all run smoothly. I can discuss the business goals of a feature with management & marketing, then work with senior engineers to deliver that same feature.
Over the past 5 years, I have deployed code in well over a dozen different languages, across a variety of stacks. Chances are that I have experience with your particular stack.
Need something built? I can help.
I've designed a number of applications over the past 20 years, and can help you build yours. I'll listen to your ideas, and work with UX professionals, engineers, marketing, etc to design and plan an application that does what you need. We'll start with an application design workshop, build spec, and plan out the sprints required to get to an MVP.
Have a great idea? I can help.
I love technical management. I've hired, mentored and run technical teams for over a decade. Whether bringing on junior staff and helping them get that first taste of success, or working with senior engineers to help overcome herculean tasks, I can make your team better. I take pride in the success my former staff have all gone on to experience. Want to know more about how I run teams? Read my Leadership Principles
Need help running your team? I can help.
One of the most exciting aspects of my work is that there are so many ways I get to work with clients. A mix of visionary leadership and pragmatic implementation; making hard business-driven decisions and evaluating cutting-edge technology. Below is a list of tasks I commonly provide to clients:
- Code Audit: I evaluate all your existing code. this is not a judgemental review of either the quality of existing or the worth of the staff who wrote it; rather it is a collaborative process with your team - identify current goals and match the codebase against it. Discover levels of technical debt, security risks, optimization opportunities, and go/no-go decisions about updating or rewriting either sections of or entire codebases.
- Improving Process & Communication: Many small teams, or non-traditionally-technical teams struggle both with their engineering process and internal communications between technical and non-technical staff. Working with your team, we'll identify opportunities for improvement, measurable metrics, and an implementation plan, then work alongside your organization to implement the changes.
- Technical HR: Over the past 20-odd years, I have been part of hiring scores of staff that run the gamut of modern software practices: UX professionals, developers, QA, technical writers and more. If you need help expanding your hiring pool, evaluating applicants or even just identifying what roles you may need to hire next, I can help.
- Writing Software (old & new): As a co-founder and CTO of a software consultancy, I wrote software for dozens of clients - from scrappy startups needing help with a prototype to enterprise-level organizations needing new software. I've also been brought on board by dozens more to fix projects that had gone awry under other developers, or to resuscitate software that was no longer aging gracefully and in need of immediate attention.