- Salesforce Development Posts by Matt Lacey

It Really Is Time to Switch to DX

Posted 2018-10-25

So my adventures in IDEs have stalled somewhat, but not because of the potential downtime involved. Im fact, we've just undergone a major change that incurred more downtime than simply switching an IDE would invoke, we switched development tool chains.

Until the launch of SalesforceDX there was only real way to handle development on the platform: you wrote code in a developer org or a sandbox, and then deployed code (sometimes via CI, sometimes manually) and other metadata to other instances, be it production or a packaging org. For the most part the main tool that's distributed as part of DX, the sfdx command line program, pushes code and metadata around, but it does so in a new format, and it interacts with other tools that are kept behind the scenes.

Not Just a Deployment Tool

You could argue that historically any IDE built for Salesforce is nothing more than a glorified deployment tool. Yes, they handle code completion, debug log based step through debuggingn etc., but in terms of getting code into an org they were hampered by the APIs available, i.e. the Tooling API and the Metadata API. The problem with these APIs is they're built around the idea of incremental changes, you can push new code, updates and deletes, but trying to do wholesale operations to change the state of an org is fraught with difficulty.

For example, like all developers (should do) you keep your code in a source control repository, and maybe you checkout a new branch and developer some new feature X, that involves the creation of a few new classes:

git checkout -b feature_X
// some coding later
git add ./src/classes/Xservices.class
git add ./src/classes/Xutils.class
git commit -m "Adds support for service x"

All well and good. The code is in your dev org and working perfectly so far although, you still need to add some extra functionality. So when an urgent request for feature Y crops up, you commit what you've done to source control, switch back to your develop (or master, or dave) branch and branch off again:

git checkout develop
git checkout -b feature_Y

Now here's the funky part, you start adding some new classes for feature Y, but the classes for X are still in your org. There's no easy, clean way to just replace what's in your org with your freshly-cut feature_Y branch. This is a pretty trivial example, and you may well be able to just delete the classes from feature X and plough on through, but once you've been working on the same code base for several years, your org can get messy. Very messy.

In my case, after three years of working in the same dev org, it had become quite different to the code kept in version control, with extra classes and fields all over the place. I didn't create a new one simply because our application can take a pretty heft amount of initial configuration and data loading, and I got pretty good at just working around the cruft and keeping a close eye on what was being merged into our main branch for packaging (yes, I issued pull requests myself). I did keep our packaging org clean through a CI tool chain, which definitely helped to mitigate any major issues. But why the past tense? Because we've moved on.

DX Makes Your Development Life Better

There's no two ways about this, the switch to DX has been game changing. Thanks to a certain @simongoodyear (that smiley chap everybody knows), we made the move to DX in the space of a week. He'd worked out just about all the things we needed in place, and now instead of having to spend half a day trying to sort out a new developer org (I only really did this previously for new developers) we can spin up a scratch org, with data loaded and the application configured, in a matter of minutes, with a single shell script.

The impact of this has been profound, and these are just some of the highlights:

So What About IDEs?

Well I know all the big ones support DX, and for VisualStudio Code there's a plugin provided by Salesforce, but right now I'm not using anything. My curmudgeonly insistance on using Ubuntu via WSL means I've not had much luck using Windows IDEs with the WSL CLI. For the last few months I've been simply using Sublime and the Terminal, and so far I'm perfectly happy with that setup. That said, I do hope to cover some IDEs again in the near future, so watch this space!