What Features Do You Look For in a SDK? 8
MadCow42 queries: "I'm in the process of putting together a 'Developer's Kit' for 3rd-party developers to use while writing front-end applications that hook into our software (our software runs a digital printing system). I've included a complete XML command language specification for our system, sample XML input and output, and simulation software they can use during development. What else would a developer want? From your experience, what makes a truly 'great' development support package? What can I do to make developer's lives easier?"
What oughta be there (Score:3, Informative)
Re:What oughta be there (Score:1, Insightful)
Source code, source code, source code and a simple, effective way of looking up functions & methods.
Re:What oughta be there (Score:2)
Not sure if this is applicable.... (Score:1)
Documentation (Score:1)
Take a look at PHP's website [php.net] (currently they have a sympathy message on their homepage, you can progress from there). It's support section is great, and many people can help themselves through it.
Re:Documentation (Score:1)
I would definitly recommend you look at that for some ideas. But definitely, like others have already mentioned, include lots of example code, that's the best way to see how something works.
Some simple suggestions (Score:3, Insightful)
In the top-level directory of the SDK, there should be a simple text file named README or README.txt. If it isn't there the user has to go hunting around in a bunch of incomprehensible directories searching for documentation and gets annoyed. This README file should point to the location of the main documentation.
The main documentation should consist of, at minimum, a tutorial and a reference. One of the first things that should show up in the tutorial is a description of the directory hierarchy of the SDK (this could be in the README instead). It seems many SDK creators are so familiar with the structure of their own SDK that they forget to tell their users about it, leaving them to wander about in a sea of incomprehensibly named files and directories. You should describe the purpose of each directory (and possibly even the files inside). If you're developing for Unix or Java, it helps to use a conventional naming scheme for your directories -- bin/, lib/, src/, and so on. (For Windows or Macintosh you might want to use longer, descriptive names if you fear your users will be unfamiliar with terse Unix-style names.)
Some SDK writers just toss a bunch of code examples in a directory somewhere, with no explanation of the who, what, when, where, why and how of using them. (Sometimes they don't even have comments.) The tutorial should have a prose description of the code examples. You want to aim for a literate programming [dmoz.org] style. Make sure the tutorial is clear to newbies. Have someone read it over before you release it. I don't mean having one of your fellow SDK developers read it for typos (although you can do that as well); have someone unfamiliar with the product read it and make sure it is understandable.
The reference documentation should have complete, detailed explanations of every class/function call/XML element/whatever. If possible, use a standard format appropriate for your platform (e.g., man pages, Javadoc). In all cases you should try to use a format which is as non-proprietary as possible (e.g., HTML is good, PDF is okay, MS Word is pretty dubious).
Other documents may not be mandatory but can be nice to have: a FAQ, a rigorous specification, a style guide, a tool guide.
The user should not have to modify files in the SDK directory itself. I always like to keep a software package as pristine as possible, so I don't have to keep wondering whether I screwed up some configuration file or not. If you must have files modified in the SDK directory structure, keep it confined to as small a location as possible (a single configuration file, or at least a single conf/ or etc/ directory). Make sure it is easy for the user to compile/execute their own files/programs outside of the SDK directory.
If you plan on making releases (especially beta releases) often, it is nice if users can have multiple versions of the SDK installed at the same time. Also, try not to completely reorganize the SDK with every new release. Pick an organization and stick to it.
Make it a community (Score:1)