Sketch has become the 'de facto' tool for UI design - i.e., for producing mockups for both mobile apps, as well as websites. There are now dozens of plugins adding features to the app, and integrating it with external third-party services. Add to this the fact that Sketch should be receiving a healthy injection of cash from its 'subscription-ware' business model, and you'd expect a solid, refined and feature-full application.
Unfortunately, IMHO, that is not the case. This is an app that has what are now long-standing, frustrating omissions and faults.
THE PURPOSE OF PLUGINS
An app should have all the functionality its users need 'out-of-the-box', and should not rely on extensions and plugins to provide functionality that core users may consider 'essential'. Plugins should address edge use-cases, which might not be interesting or financially viable for the developer to cater for.
If I want my designs to be automatically uploaded to some third-party online sharing service, that is a good use-case for a plugin. If I want to create full-blown animations from my static designs, that is another.
An app that is designed for mocking up user interfaces of websites should, however, have pretty solid built-in *auto-resizing* tools - tools which should help me align and resize my layout elements to fit into different sized canvases. That is an essential function. Sketch's "Resize" function is, however, limited and buggy: it does not resize items based on your canvas size (only on container groups). Resizing options are hard to understand, and buggy, often not allowing you to have the resizing effect you need. This forces the user to have to download a plugin in order to have 'proper' resizing functionality - such as "Fluid" or the better "Auto Layout".
But the bugs and lack of functionality don't end there. Although Sketch has 'Symbols' - i.e., "master elements" that you can use multiple times in your design, overriding content but keeping styles - these don't work as expected. For instance: there is *no way* to create symbol buttons that automatically resize when the text is changed. Although several plugins have been created to try to address that - "Button", "Adjust Button Shape", "Dynamic Button Symbol", etc. - none of them actually work well, because of limitations in Sketch itself.
In fact, there are limitations, gaps and omissions *everywhere* in Sketch. There are wonderful plugins that can, for instance, download an image automatically from Unsplash, and apply it as a background fill to one of your shapes. But once the image is applied as a fill, there is no way to export it, so it can be used in your actual html or code (you have to export the 'shape'). Want to document your layout with notes? You should get a plugin. Need icons from FontAwesome? Get a plugin. Want standard colour palettes - like Material Design, or Pantone? A plugin. Need to have auto-stacking, grid layouts? Plugin.
So, with so much relying on plugins, we would expect Sketch's plugin architecture to be solid, and their developer support to be nothing short of stellar.
PLUGIN PROGRAMMING LIMITATIONS
Unfortunately, Sketch plugins are written basically in Javascript, and use a Javascript-Cocoa bridge to access native MacOS functionality. Although widely used on the web, Javascript is a notoriously tricky and difficult language for newbies to learn, and Cocoa is a gigantic framework. This means, that the developer trying to produce plugins for Sketch should expect a *very* steep learning curve. Sketch's own documentation starts by encouraging prospective developers to learn by exploring the code of existing plugins.
Adding to this difficulty is the fact that Sketch's API keeps changing - as they fix bugs and add necessary features - and developers have to keep updating their plugins in order to keep them working. Many of the plugin developers, however, seem to be well-intentioned amateurs, who are trying to address the shortcomings of the program as best as they can. This means that the quality of the code is not high, and as updates are rolled out, many plugins break. Constantly.
LACKING PLUGIN MANAGEMENT
If plugins are so vitally important to Sketch, you'd expect the app to have fantastic plugin management features - like a way to search, instal and update plugins in-app. Sketch's official way for the user to manage plugins is, however, for them to download the plugin manually - often from a GitHub repository - then, double-click on the main plugin file (which copies it into Sketch's plugin folder), then to open the in-app "Manage Plugins" dialogue, and enable the plugin. Uninstalling a plugin involves having to open the hidden plugin folder, and manually drag the plugin to the trash.
With such dismal support for plugin management, it's no surprise that over the years there have been a few projects that have tried to fill that void. "Sketch Toolbox" and "Sketch Runner" both tried to ease plugin management pains for Sketch users, and the latest one to take on the mantle is "Sketchpacks" (the most promising and feature-full so far). Some plugin developers, like Craft, have ended up developing their own plugin manager, for their own plugins. Which means that if you have Sketchpacks and Craft plugins installed, you will have 2 extra items in your Mac menubar - just to keep your Sketch plugins up-to-date.
THE SOFTWARE SUBSCRIPTION MODEL
I understand why some companies like the 'software subscription' business model: it's a more reliable source of income for them than the traditional pay-per-license. Ultimately, it might not cost any more money to the customer, and it provides the company with a steadier flow of cash that makes planning and everyday operations easier.
Unfortunately, what is best for the company, is not always best for the customer. As a customer, I want to buy a *product*. I want the company to take responsibility for delivering to me what I'm paying for, and not deliver a promise that they will improve. If you make *substantial* improvements and add features to the software, then charge me for an *upgrade*, as this is now a new product. I should not have to pay for your software as if it were electricity, or water, or gas, or some sort of regular utility bill. If you start charging me a subscription, I will *always* give your competitors a chance.
SKETCH'S POPULARITY
With so many shortcomings, why is Sketch so popular? Unfortunately for us, because at the moment we have nothing better in this design space. Affinity Designer is a much more solid tool, with incredible features, but it is geared solidly at print production, and lacks the plugin ecosystem that Sketch has forced its users to build. Adobe tools suffer from the same bugginess, and the same subscription model, as Sketch. Other new tools lack in features.
This lack of competition is probably the very reason why these shortcomings in Sketch have gone for so long without being addressed by the developer. We can only hope this may change.