We use a lot of tools in our development lives, from image editors to optimizers and programming IDEs to minifiers. Here is a look at some of our more prominent choices.
Let's kick things off with graphic design. For many years our tool of choice was the stalwart Adobe Photoshop, which we still use for some tasks. Recently though, we've made the switch to the Affinity line of products for our graphic design needs, starting with Affinity Designer for vector graphics like the logo found on this site. Making the move to a truly responsive website required us to begin to make visual elements vector graphics that scale beautifully. Affinity Designer is our choice for vector work due to its extreme power and incredible ease-of-use. It can work directly with SVG images reducing the need for importing and exporting hassles. We love the product so much we have a page here dedicated to free resources we've provided for it. Originally Mac only products, they have recently been released for Windows as well. You can learn more about the Affinity products from the Serif website.
When not using vector images we need to squeeze every last pixel to get the size down to the smallest it can be while still retaining image quality. Our tool of choice to accomplish this feat is Squash from Realmac Software. The interface is sparse yet clean and accomplishes exactly what it needs to. The output from Squash is exactly what you'd expect, nothing more, nothing less. A quality application that does one thing and does it very well. What more could you want?
Let's move on to planning and business. We're fans of mind maps here at DSV and the hands-down best app for that (in our opinion) is the iThoughts family. Most of our programs since 2011 have started out as a mind map using one of the iThoughts apps, usually iThoughtsX on the Mac but sometimes the iPad version has been there to kick things off. It's so easy to create clear, legible, and good looking maps in this suite and sharing them with clients couldn't be easier. Compatible with OPML standards and other mind mapping software with the ability to generate images and PDFs make this a no-brainer choice. They just released the Windows version adding to the compatibility layer.
Dealing with clients inevitably leads to invoicing for completed work and services and tracking payment. We lean on Totals from Kedisoft to generate and track our billing. It was super simple to build a custom template for invoices using our company's assets, providing branded invoicing. The app provides simple, straightforward tracking of payments on the invoices you generate as well as allowing for creating and tracking projects and inventory items. With client management tools on top, this app is a great tool for asset and invoice tracking.
Now let's dig into some web infrastructure. On our development Macs we use Vagrant with Virtualbox to host Laravel Homestead. This allows us to have a virtualized server for development that closely matches our production servers and each other regardless of the actual hardware it is running on. Vagrant is managed using the Vagrant Manager Mac app. Our production stack is LEMP, that is Linux, Nginx, MariaDB, and PHP. Our production servers are hosted by Digital Ocean and are managed using Laravel Forge. We connect to Forge from our Macs using the excellent F-Bar app. When things get serious for both local development and production management, we rely on iTerm 2 for command line sanity.
So what about coding? Well, we use a variety of tools for our coding efforts, preferring different tool for different projects. One thing we've learned over the many years we've been doing this: there is no one tool to rule them all when it comes to code. Select the best tool for the job at hand and don't look back. We use PHP as our language of choice for web development, so we lean on PHPStorm from JetBrains as the most feature complete and useful IDE for that kind of work. It has built-in support for the Laravel framework we use, and with the IDE Helper composer package, it even autocompletes custom classes and models, etc. If you're developing in PHP you're doing yourself a disservice if you're not using PHPStorm.
When we're developing for any of Apple's OSes, there really isn't a choice other than Xcode. As much as we like JetBrains products (yep, we also use IntelliJ IDEA for Java development) AppCode simply doesn't compare to the tight integrations that Xcode has. Whether you choose to code in Objective-C or Swift, the integrated Interface Builder is second to none. When it comes to rapid changes, notes, markdown editing, or just need some easy editing with raw power, our go-to tool is SublimeText. WIth the package control system and the myriad of plugins available for it and the support community surrounding it, this is a text editor that's tough to beat.
We use a number of helper applications when we're coding away that make our jobs and our lives simpler or more powerful. For example, we use Kapeli's venerable Dash app for quick lookups in the documentation for the language we're working in as well as to store reusable code snippets. Speaking of snippets, what about text expansion? On the Mac the best tool for instant text expansion is, funny enough, TextExpander from Smile. It's great for boilerplate as well as commonly used code blocks. For comparing files, be it images or text, the tool we grab is Kaleidoscope. Diff'ing has never looked so good or been so powerful. For our preprocessing and minification needs, we rely on CodeKit. There are several apps like it now on both Mac and Windows, but it was the first and is still the best at what it does. For our preprocessing and minification needs, we rely on Laravel Mix (Webpack).
Continuing on our helper kick, we use Tower, the best Git GUI out there on any platform. The integration with Kaleidoscope and other tools we use along with its stupid simple drag and drop branching and merging, make this a no-brainer decision to use to manage our source code. Using commit hooks for continuous integration through Forge, we auto-deploy to test and production. When a change needs to happen outside of source control, we rely on Panic's Transmit to manage files on the servers via SFTP. As part of our CI process, we send notifications of commits and deploys to one of our Slack channels to keep everyone abreast of what's going on. The last piece of the helper puzzle is Sequel Pro to manage the databases locally and in Production.
This sums up the tools we use for development and hosting. We hope you enjoy our list. Think there's something we missed? Let us know in the comments below.