Tooling
I think it's safe to say that software has become immensely complicated. For any given technology, there is a wide array of best practices, standards and idiomatic ways of doing things. Once you learn one, another pattern comes along and you might have to reevaluate the way you were doing things previously. To help us mortals stay on course it is highly advisable to rely on tools to nudge us in the right direction. The web community is great for tooling and below is my current, go-to toolkit:- vscode - hands down the best (and free) code editor.
- Git/GitHub/Git Bash - Git is currently the most popular version control system, GitHub is the best place to host your git-controlled projects and Git Bash is my favorite command line terminal for windows (comes with git).
- smartgit - a UI client for git as to me, it's much easiest to work with it through a UI rather than the command line.
- Lighthouse - a great website auditing tool and it's already built into the Chrome browser.
- TypeScript - I don't write any JavaScript code nowadays and have switched completely to TypeScript, which I believe helps me write better code and provides a better development experience. I also highly recommend using TypeScript in strict mode.
- Prettier - a fantastic code formatter.
- ESLint/Stylelint - static code analysis is fantastic for enforcing code standards. ESLint can analyse your code while Stylelint will analyse your CSS.
- npm-check-updates - I'm obsessed with staying on the latest release for my app's dependencies and this tells me if I'm not.
Community
For my work, I largely rely on the work of other developers as the building blocks for my applications. Even this seemingly simple site has a dozen dependencies and a couple dozen dev dependencies. This way I save myself an enormous amount of work trying to recreate the wheel.My process for selecting technologies to work with is embarrassingly simple and it really comes down to 3 simple questions:- How many stars does it have on GitHub?
- How many weekly (usually npm) downloads does it have?
- Does it have any obvious disqualifying factors in its repository like an ancient "last commit" date or a depreciation notice in its README.md?
Productivity
The formula to define one's productivity is: productivity = focus intensity x focus time The steps one must take to maximize their productivity depend on the individual. For me it helps to be in a comfortable position that I can spend hours in, ideally free from distractions. Soundproof headphones and repetitive music work also wonders for me.Beside any technical recommendations, it's imperative to always take good care of oneself. This is where good sleep and exercise come into play. Taking care of these will help maintain a focused mind. Lastly, I've found it hard for myself to stay highly focused that I'm uninterested in. If possible, try to make your work interesting - be it through finding it yourself or asking for it from your lead.Development
When it comes down to getting down and dirty with the implementation details I like to keep things as simple as I can. Front-to-back-to-mobile should all preferably be implemented with a single technology. My preference at this time is Next.js for frontend and backend development with react-native for mobile. This presents a highly efficient combination allowing one to re-use some code between different code bases (since they're both built with React), especially if using a common UI library like react-native-web.Deployment
As with development, it's good to keep it simple. Docker, micro-services, kubernetes, etc... are all best left to enterprise development. I've had great success with serverless deployments.After attempting to create my own deployment library for AWS, I think it's much more straight-forward to use a more established platform like Vercel. Much of the vital web things are already baked in like analytics, CDN hosting and automatic deployment from commits. There is zero configuration required if you're already developing with their framework, Next.js.Maintenance
When thinking about maintenance of your software you should first consider if it's even worth maintaining. Have you found a product market fit already and have some degree of confidence that your product will be around for years to come? If not, you would very likely be wasting time writing tests and worrying about long-term maintenance. Time that could be better spent on improving the product.
Spilling the beans
Mar. 12, 2021
It's now 2021, which means that I have been a professional software engineer for over 10 years. Having also spent thousands of hours outside of work reading, practicing, and and tinkering, I now consider myself a master of the craft. As such, I consider it my duty to try to put into words what I have learned so far in my tech career. It's time to spill the beans. I will attempt to describe exactly what I think it takes to create a masterful technical implementation.