Hi, I'm Tim!
I've been passionate about programming since I was old enough to type, and I've been getting paid to do it for over a decade. I love creating robust, effective, and elegant solutions with web technologies.
About Me
I'm an independent creative thinker with over a decade of experience developing software using web technologies. I am passionate about helping companies design and implement effective technical solutions by writing high-quality code that both arrives on time and stands the test of time.
Who am I?
- 💼I have extensive experience with a wide range of web development technologies and with technical leadership.
- 🔥I'm passionate about innovating and proactively moving my projects forward, not just doing the bare minimum.
- 📚I'm a lifelong autodidact. I'm pepetually curious, and I learn new technologies and processes very quickly.
- 🔍I'm highly conscientious, detail-oriented, and deeply insightful. I turn chaos into order.
Who are you?
- 💻I'm looking for senior web development positions (principal engineer, full-stack, frontend, backend, DevOps, etc)
- 👥I'm looking for companies that foster clear and open communication and encourage growth.
- 🏆I'm looking for companies that share my passion for software craftsmanship.
- 🗓️I'm looking for companies that have flexibility on non-standard work schedules.
My philosophy: Code quality = Faster velocity
In the modern age of software development where moving fast is everything, some people make the mistake of thinking this means we must sacrifice code quality for the sake of development speed. I firmly believe the opposite, that the only way to achieve faster implementation and iteration times is by relentlessly focusing on increasing code quality. Sacrificing code quality quickly leads to incomprehensible systems where it is impossible to change anything without breaking ten other things, which slows progress down to a crawl. The only way to produce a system that is flexible enough to enable rapid development is to ensure your application is properly structured and documented to provide clarity for developers regarding its operation. At the end of the day, there is no true trade-off to be had between quality and quantity in software development. The only way to consistently generate high quantities of code is through a sustained focus on code quality. My approach to ensuring high code quality incorporates a combination of careful planning to avoid mistakes before they happen, robust quality assurance to fix mistakes as quickly as possible when they arise, and encouraging a culture that seeks to constantly learn and improve from mistakes.
Step 1: Careful Planning
Employing agile software development processes doesn't mean that you can just jump straight into coding without thinking things through. Proper planning is essential for ensuring that development work stays continually focused on the overall project goals throughout the rapid iteration cycles that agile software development enables. Planning does not necessarily mean endlessly agonizing over every last detail, but it does require developing a comprehensive strategy that incorporates a clear picture of the project priorities and potential risks before you start writing any code. It is vital to take into account many different priorities when designing an effective software system, such as financial priorities, feature priorities, end-user priorities, software administrator priorities, developer priorities, management priorities, etc. Any project that is implemented without taking all of these important priorities into account is likely to fail. Particularly when the proper approach is uncertain and further experimentation is required, it is essential to ensure that the proper framework is in place to allow that experimentation to proceed as quickly and efficiently as possible.
I have many years of experience planning out extensive software development projects from start to finish using agile software development methodologies. My extensive experience has given me not only the technical knowledge of how to execute a plan, but also the judgment to be able to determine what ought to be done in the first place. However, I believe that an even more important contributor to my successful planning than my experience has been my strong ability to learn new technologies very quickly. The only constant in any growing business is change, and I thrive in these dynamic environments as I love learning and deepening my understanding of new technologies that can provide better solutions to upcoming problems. I have an extensive track record of learning complex new technologies enough to effectively apply them within a few weeks and becoming an expert that can easily guide others in the details of best practices within a few months.
Step 2: Robust Quality Assurance
Writing high-quality code is a form of communication, and like all communication, it is a mix of art and science. In order to be able to reliably create code that properly instructs the computer to do the right thing, the code must first be readable and understandable by the humans that determine what the right thing to do is. This requires following a coding practice that prioritizes factors like good organization, succinctness, and consistency, as well as technical factors like security, performance, and correctness. All quality assurance practices should be carefully designed to serve this core goal of clear and effective communication to foster shared understanding and collective success.
I subscribe to a software craftsmanship philosophy that prioritizes not just coding quickly but also thinking deeply about the ultimate purpose of your code. I always take the time to be sure I fully understand the nature of the problem that I'm working on before trying to solve it to ensure that I use the time spent implementing the solution as effectively as possible, and I try to help others learn this skill as well. During my years of experience leading a development team, I have had the opportunity to employ a wide range of quality assurance practices, such as code reviews, pair programming, automated testing, continuous integration, end-to-end monitoring, etc. While all of these tools help improve code quality, ultimately I've found that no procedure can fully replace the need for genuine care on the part of the developer for creating well-crafted solutions.
Step 3: Encouraging Learning and Improvement
In order to create a development culture that consistently generates high-quality code, the entire team needs to be aligned on pursuing this goal. I believe that the most important aspect of this is developing a culture of trust where people feel they are able to give open and honest feedback to anyone on the team. Promoting healthy communication is essential for this, on both the giving and the receiving end. Employees need to be trained in giving feedback that is compassionate and constructive, as well as trained to accept feedback with humility and positivity in the spirit of continual improvement. Only through clear and open communication can the unique strengths and weaknesses of each team member be leveraged to the maximum extent to generate success.
I have been leading a development team for over four years and have grown immensely through the experience, and I seek to help everyone around me to grow in turn. I have had the privilege of getting to help many new developers grow their technical and soft skills, as well as getting to learn from many other developers smarter than me. In addition to internal communication skills, I have also gained extensive experience with communicating directly with customers to collect feedback, learn more about their priorities, manage expectations, and generally ensure an excellent customer service experience. I deeply value all the lessons I've learned from interacting with the real people that use the software I create, and it brings me great joy to see the value that my work has added to their lives.
What I'm looking for:
I am interested in working with companies that share my passion for creating high-quality software. Specifically, I am looking for senior individual contributor positions in web-based industries, especially with some component of leadership like team lead or principal engineer positions. I want to be getting my hands dirty with writing code on a daily basis, but also to have the ability to actively influence the direction of the projects I'm working on. I have zero interest in doing the bare minimum needed to collect a paycheck, when I work on a project I want to be actively engaged in looking for opportunities to improve its chances of success and watching out for pitfalls that could lead to failure. I also have a soft spot for open-source technologies because I love the freedom and empowerment that they give to the software development community, I would love to work on open-source technologies full-time.
I highly prioritize working a 4-day day work week. I'm looking for savvy companies that are interested in a unique opportunity to acquire a highly productive employee at a discount in exchange for flexibility on work schedules. I find that my overall output is highest when I work this schedule, and I think it does not make sense for people to pay me more for me to do less. I am grateful that I have had the opportunity to work this schedule for most of my career, and I look forward to finding more companies that are open to the advantages that this trade-off enables.
If you want to learn more about me as a person outside my career, I would love to connect with you and chat more sometime, feel free to drop me a line!
Past Projects
At the end of the day, talk is cheap and results are what really matter. I have an extensive history of successful projects under my belt, here are just a few of the highlights from my career:
(Click on a project to learn more)
Skills
Buzzwords! Get your buzzwords here!
Select an item from the list
Let's chat
I'd love to meet you and discover how we can help each other out, please send me a message below!