At a developer conference last week, several app and game developers said, "SDK has become a four letter word." That goes the same for API.<p>I have a general sense as to why this is, but I am curious to hear it from the community. Why are SDKs and APIs a dreaded aspect of the development cycle?
Lots of reasons:<p>- Software bloat leads to slow download times and slow launch times and more RAM usage<p>- Abstraction layers often get out of control and sacrifice lots of performance and lead to software bloat<p>- Often you start with and SDK thinking it will solve your problem, but it turns out it doesn't solve your exact casem which means you end up spending lots of time fighting the SDK which leads to a mess+abstrction+bloat. Many times you might have been better off writing it from scratch.<p>- Dependency hell which brings in the bloat+abstraction problems. Plus now you now have extra environment and deployment headaches to make sure everybody involved has the correct dependency chain and correct versions of everything.<p>- Build system hell: Once you have dependency hell, you often bring in build system hell to manage everything<p>- SDKs (Frameworks) take control of everything: Often frameworks impose lots of rules and conventions that leak into everything else you do. This means following their design patterns, subclassing from their classes, etc. Their stuff may not fit well with your own stuff. Also, this often deeply entangles your stuff with their stuff so it is hard to remove later.<p>- Fighting between SDKs: Lots of SDKs try take over the world. If you use multiple SDKs, they may fight.<p>- Lack of understanding: People too eager to use SDKs often lack the understanding of how it works. To fix bugs, to fix performance problems, to extend features, means you must ultimately understand it, but often this comes too late in the process. And you discover that for all these things will require massive changes to the framework or a complete rewrite. You would have been better off writing it yourself in the first place or picking some other SDK that you understood better.
I love SDKs and APIs. "SDK" means to me that someone else has done a bunch of work for me. A good example of the AWS SDK, which lets me very quickly integrate S3 uploads into anything I'm working on.<p>"API" means that I can use someone else's data and mash it up with my own (or even another person's data), and that's really exciting!<p>In summary: no idea why those people said that.
Lots of work, may require invasive permissions, may run afoul of app store rules etc, may be a pain in the ass integrating with whatever non-native approach you're building an app with, and potentially weeks to get any change live.<p>The people at FGL.com are working on a promising solution to this - <a href="http://enhance.fgl.com" rel="nofollow">http://enhance.fgl.com</a> -
I believe myself this development in APIs is just tip of the iceberg. If the software development goes like this, everything will become huge, and hard to scale, and will need lots of engineering resources.