I’ve been doing Full Stack Development for a while and I picked up a few things that have helped with my productivity. These are 21 things I wish I knew earlier in my career. I’ll share them here. I hope this helps you on your programming journey. Thanks for reading.
What can be automated should probably be automated. Repetitive on-call task? Write a script for it. Recurring data upload task? Write a script for it. Frequent database queries? Write a script for it. I have seen too many people doing things manually when they can be automated. I have probably saved hundreds, if not thousands of hours, automating the boring stuff. My recommendation: Python.
Use a CLI Framework
So you’ve got a collection of related scripts. Maybe they use the same database connections. Maybe they share some code. Or maybe you want an easy way to pass arguments to your scripts. Use a CLI framework and turn your scripts into a CLI tool. It’s a great way to organize and document scripts. My recommendation: Typer.
Use a Git GUI
Most people start off using Git in the command line. This may be sufficient for solo projects or small team projects. But once you start juggling multiple branches, it is extremely useful to see everything in a GUI. Handling merge conflicts, rebasing, cherry-picking, diffing, branch filtering, and branch pinning. It’s all faster and more intuitive with a GUI. My recommendation: Fork.
Learn Unix and Shell Scripting
Unix permeates so many aspects of web development. Even if you don’t actively take the time to learn it, you will probably learn it through osmosis working in the industry. You’ll probably save time learning or reviewing the basics upfront. My recommendation: tldr, simplified and community-driven man pages.
Use a Note-Taking Tool
For every non-trivial task that I work on, I keep a markdown file that tracks every related link for that task. Slack threads, email threads, Jira tickets, documentation, GitHub PRs. I keep a log of work completed and status updates for that task. Use a tool that supports editing in plain text to avoid vendor lock-in. Stop wasting time forgetting things. My recommendation: Obsidian.
Use the Subconscious
At the end of the day, I write down the top priorities for the next day. This habit has allowed me to remove all remaining thoughts about work and unplug. If it is 5 pm and you’re still stuck on that bug, it is ok to put the keyboard down and come back to it the next day. Let your subconscious mind work on the problem. The vast majority of the time you will solve it immediately the next morning.
Use Shell Aliases
Do you find yourself running specific commands often? Write an alias for it and put it in .zshrc, .bashrc, or whatever shell you prefer. Don’t waste brain space trying to remember all of those long and unwieldy terminal commands.
Use The Debugger
I see many new developers rely on console logs to debug their code. I have been guilty of this for a long time, coming mostly from dynamic languages. Once I started doing more Java and Scala development, I had no choice but to start using the Debugger in Intellij. Since then, I have realized greater productivity by being able to rapidly cycle through breakpoints and navigate code.
Time Blocking To Minimize Interruptions
Before you start on a hard task, block off uninterrupted time to work on it. This is necessary to achieve a flow state if you work in a distracting environment. Schedule “Focus time” in Google calendar. In Slack, set your status to “In a meeting”. Create a 2-hour meeting to work on the task. Others will see that I’m in a meeting and be less likely to expect an immediate response.
LeetCode Every Day
Grinding LeetCode is more than just for interview prep. Just like an athlete lifts weights to build muscle, a programmer leetcodes to build muscle memory. Those who lift every day will likely have a competitive advantage in the sport over those who don’t. As a side bonus, you will likely double, maybe triple, your salary. My recommendation: LeetCode.
Lift Actual Weights
As a dev, it is tempting to go straight to your side hustle after a long workday. Instead, go do something active. Play some tennis. Go for a long walk. Lift some actual weights, not the metaphorical leetcode weights. I know a dev who ended up in the hospital from overworking. By stopping to take care of your physical health, you may be sacrificing short-term productivity. But you’ll increase your longevity and thereby increase long-term productivity.
Learn Project Management
As a dev, it’s easy to dismiss project management as something only project managers do. I’ve worked on teams with no official process as well as teams with an official process. The teams with some form of the process were significantly more productive than those without. The process should revolve around driving incremental delivery of code to production. The teams without process generally devolved into chaos. My recommendation: Scrum.
The thing I realized later is that ORM technology is highly specific in its language and framework. When you move to another project or job you’ll have to waste time learning another one. The knowledge doesn’t transfer that well. Learn enough ORM to be productive. If you know SQL, you can pick up a new ORM easily. Not the other way around. My recommendation: PostgreSQL.
Learn the Framework and the Language
Learn the Defaults
Stop obsessing over the customization of your text editor or IDE. Just get good with the defaults. Every time you switch jobs or get a new computer, you’ll be productive immediately. The time I spent perfecting my dotfiles probably could have been better spent delivering actual business value.
One of the biggest killers of productivity is jumping straight into code without actually thinking about the problem. For whatever reason, many new devs do this. If you are unable to make sense of a problem because you can’t figure out the flow of data, draw it out. Use a pen and paper or a diagraming tool. Draw out the boxes and arrows. It will become clear. My recommendation: draw.io.
Use a Dedicated Password Manager
Not only is this more secure, but it can actually save time because you’re constantly forgetting where you put your credentials. As a dev, you need to keep track of API keys, database credentials, usernames and passwords, and all kinds of secrets. Stop wasting time resetting lost passwords. My recommendations: KeePassX if you don’t want vendor lock-in. Or LastPass if you work on a team.
I can’t count the number of times someone has told me it doesn’t work on their machine. If you notice yourself running into this problem, then consider using docker for local development. I’ve probably saved tens if not hundreds of hours by using docker to onboard other devs onto some projects. However, there may be scenarios where it may be overkill or unfit to use docker.
Use the Right Tool for the Job
Use PostgreSQL on a Mac? Use Postico. Use Kubernetes? Use Lens. Need an HTTP client that also supports automated monitoring? Use Postman. Need to draw mockups? Use Figma. For any particular technology or need, there is probably a tool out there that makes things easier. Stop doing things the hard way.
Learn System Design
Not only does this help with interviewing for senior positions, but it actually prevents situations where you under-optimized or over-optimize your infrastructure. Did we really need Kubernetes for that app with under 500 users? Did we really need a queue or a NoSQL database? Is there a rationale for choosing a technology or did you blindly follow a trend?
Always Be Learning
I’ve made mistakes. I’ve done things inefficiently. I’ve wasted time and money. That’s ok. I learn from it and get better over time. Take courses. Read books. Build stuff. Every little thing you do compounds over time. As craftsmen, we must focus on improving our craft every day. Through diligence and experience, our productivity will naturally increase.