Random

What's in my Software Engineering Toolbox

While tools aren’t everything, they can significantly enhance productivity. Here’s an overview of the apps I rely on for coding and content creation.

OS

I prefer macOS. Despite its closed nature and how Apple treats developers, I still enjoy using my MacBook. The hardware is top-notch, and the OS is productive out-of-the-box without extensive configuration.

I’ve experimented with Linux (up to Ubuntu 18.04) and Windows (up to Windows 7). I might switch back to Fedora when the year of Linux really happens. For now, I stick with macOS for its balance of usability and performance.

Project Management

For client projects, I use whatever the client prefers, usually Jira or sometimes Notion.

For my own projects, I use Linear. It works very well, without being too complicated. I don’t want to overthink this part, to focus on building. Before that, I used to just create a note in Obsidian and list all the tasks that needed to be done. It is fast and simple to setup, but I wouldn’t try this with a team.

IDEs

I tend to switch between JetBrains IDEs and Nvim. They are both fine and work great. However, in the last few months, I started using the terminal more and more. I prefer working with CLI tools. This means that I am now using Nvim most of the time. For now, it is sticking, and I am enjoying it ever yday.

When I have to work on Swift, I use Xcode. Sadly, Swift (and SwiftUI) is not well supported on other IDEs. This means that I am stuck with Apple on this. There was an attempt to use SourceKit-LSP for Swift in Nvim. It works, but it is limited to Swift, and not SwiftUI, or any other Apple frameworks. Building an iOS application with this would be complicated.

AI Tools

I was a beta tester of GitHub Copilot and found it useful for boilerplate code. However, it didn’t significantly boost my productivity, and now that it’s a paid tool, I don’t find it worth the cost. It works well for some specific tasks, but it is not the silver bullet most of people want to sell you. Since we’re all writing shitty code, I’d rather be slightly slower and understand what I’m doing, than give control to these tools.

Terminal

I use Kitty after having used iTerm and Alacritty. However, I find that Kitty is just simpler to apprehend and has a better integration with macOS in general. Once setup, it feels more native that the other options.

I kept zsh for my shell, with oh-my-zsh and some custom configuration. Homebrew is my package manager of choice. If you want more details, you can check my dotfiles (needs an update).

I don’t use a Git client other than the CLI, and sometimes lazygit. I tried Fork a few months ago. I don’t need it, but I like the UI.

Browser

I am using Firefox with a few plugins (1Password, BetterTTV, Facebook Container, Firefox Multi-Account Containers, Firefox Translations, Privacy Badger, React Developer Tools, uBlock Origin, Unhook, SponsorBlock, Vimium, Firefox Color with Catppuccin, and Control Panel for Twitter). I also have Arc and Safari installed for testing purposes or when a modern gouvernemental website requires a Chrome browser (because reasons).

HTTP Requests

For testing endpoints, I use HTTPie. Insomnia and Postman have become cumbersome, requiring accounts for basic functionality. HTTPie is simpler but not as feature-rich. It works well most of the time. I just don’t want to create an account to send HTTP requests.

Tech Stack

My stack is pretty simple, I mainly use Go for the backend. For the frontend, I can use HTMX for simple websites, and React/Remix when I need more reactivity. Most of the time, HTMX is good enough, and adding React would just make the project boring. I am also in the process of learning C, and would love to play around with some Assembly, but I haven’t found the time to do that just yet. It might also be a good reason to start streaming.

Swift is my go-to when I need a native application, either on macOS or on iOS. I would love to see this language gain traction outside of the Apple ecosystem and become a tool to build software on any platform. The Swift Team made some great design choices: it is performant, and the syntax is ok.

For any static websites, I can only recommend Astro (if you want to sparkle some reactivity), or just a good old HTML file. Please, don’t build a static site that needs 400mb of RAM.

Note-Taking

I switched from Obsidian, to just using nvim for any kind of note-taking. When I need to draw something, I use Excalidraw.

Most of the time, I simply add documentation into the project’s code through markdown files. It works well enough for me, and it allows me to save the context of some decisions. I found that documentation is often forgotten when working solo on a project, and it might become a problem when you need to update the code a few years from now.

Design

I use Affinity tools (Designer, Publisher, Photo) for anything related to image manipulation. If I need to create a prototype, I use Sketch. I started doing my things with Sketch a few years ago, and don’t really want to make the effort to switch to Figma. I don’t see a big enough difference between the two that would force me to relearn everything.

Conclusion

While this list is concise, it encompasses the essential tools for creating a new product and maintaining productivity. Remember, the key is focusing on what you create, not necessarily having the best/latest tools. I hope you found this overview helpful.

Vincent

  • Published on May 18, 2024
  • 4 min. read