Here at Atomic, we’re always striving to get better at our craft. From our guiding principles to the nitty-gritty details of implementation, we strive to reduce the repetitive and mundane at every chance. It makes our lives easier and improves our efficiency and quality for our customers.
This concept isn’t new, but I wanted to walk through some examples in my current project to help illustrate the idea.
1. Our Process
We do enough discovery and planning to define the vision and get started, but leave room for rapidly changing requirements. Iterative development keeps us focused on the business value we are providing. We do weekly or bi-weekly iterations and daily standup meetings to keep everyone on the same page, maintaining a tight communication loop.
All of this prevents us from deviating from our customer’s vision. Investing time here means we can avoid spending time reworking and trying to calm down a frustrated customer.
2. Innovation Games
Innovation Games are activities we use with customers to draw out requirements during our Research, Design, and Planning phase. This creative, engaging process gets the best bang for the buck from our customer’s time, and it has the pleasant side effect of helping us build the software that our customers actually want: another win.
3. Testing
We drive our development with high-level acceptance tests and low-level unit tests (BDD/TDD). Finding and fixing bugs is long, hard work.
We proactively avoid as many bugs as possible to save the time and effort of tracking them down. When debugging an issue, we watch our tests fail to ensure the test has identified the true bug so the issue doesn’t need to be revisited. Automated tests speed up our work, make our designs more robust, and help catch regressions.
4. Open-Source Tools
Open-source tools and libraries can greatly reduce the cost of development. They can also keep you working on your customer’s vision, instead of reinventing large portions of your product. Linux, NGINX, PostgreSQL, Rails, React, and TypeScript are a few examples of large-scale open source tools worth considering for new projects. Keeping your eyes open for these tools can save you hours of rolling your own solution for a problem that has already been solved.
5. Practicing with the Terminal
I truly believe there is a time and place for everything under the sun. There’s a time for working in the IDE or the GUI, but jumping into the terminal (on any OS) is a fantastic way to speed up most tasks. Make sure to add this skill to your tool belt. Some of my favorite terminal timesavers are autojump, ripgrep, and Git.
6. Editor Selection
You won’t find any atoms using Notepad or TextEdit; those require far too much work. We use editors that allow the most flexibility and customization (mostly Vim, VSCode, and Sublime Text). For example, our Vim setup includes quite a few plugins such as: fuzzyfinder, fugitive, Rails, and small custom aliases. These plugins remove the mundane tasks of navigating directories, bouncing from source to tests, running specs from outside your editor, integrating with source control, and many more.
7. Knowing your Tools
Atoms are constantly refining their knowledge and tools. We watch for new plugins, scripts, hints, and tricks that allow us to do things faster. After using Vim for more than eight years, I’m still learning new things about it and new ways to use it. Learning that a command chain of four keystrokes can be done in two, or that you can read the current directory listing directly into your file with :r!ls
, is a regular occurrence for an Atom. There is always something new to learn about your tools.
Great programmers are definitely as lazy as possible–but that’s a good thing. I see this proven day in and day out. From our high-level process to our low-level improvements, these smart practices help make us all as efficient as we can be.