Approach
I design and write software that solves problems and delivers business value. On the first draft, my code is clean, well-factored, idiomatic, and reasonably efficient. All names are carefully chosen to be as concise as possible while clear. Where each is feasible, my code is idempotent, orthogonalized, and generic. It verifies preconditions and ensures postconditions. Where necessary, isolated components are optimized until performance meets business needs; elsewhere, time isn't spent shaving cycles at the expense of clarity, reliability, or the next task.
I know that business context determines the right balance of priorities when doing professional work, and I execute accordingly. I do the best work that I can complete with the resources allocated, and I tell the truth about feasibility upfront.
I know that a key part of software development is offering opinions informed by technical expertise and professional experience. Accordingly, I proactively advise on whether an issue is best addressed with changes to software or process, on the merits of building vs. buying, and on when scope should grow or shrink. I point out when I am tasked with facilitating a bad plan. I happily suggest an off-the-shelf tool when it can do the job better, faster, or cheaper than I can write one. I don't make unrealistic promises, and I offer suggestions where I see an opportunity with a favorable cost-benefit ratio. Of course, in case of disagreement, I do the work as assigned to the best of my ability (unless the issue is moral).
Tools
These are tools that I love so much I bought personal licenses:
My other favorite tools for an efficient workflow and robust solutions include:
This site is my first project in WebStorm.
Capabilities
I have designed and written:
- database schemas,
- database queries,
- business layers,
- web sites,
- web services,
- desktop applications,
- backend services,
- utility libraries, and
- complex systems integrating them all.