Before submitting an exercise, check that you can answer "yes" to each question below. If one of the exercises already published doesn't follow these guidelines, please help fix it!
Ask someone who has never seen the exercise to try it out. Have the user go through the exercise without any explanation. After the user tries a set of problems on their own, check that the user tested all problem types and read all the hints.
When you tested your exercise, did the user know immediately what it is they're supposed to do? If not, can you write a concise (one sentence) explanation, like "drag the point to a zero of the function"? If not, change how your exercise works and test it again.
No explanation should be necessary for anything other than "how do I answer this question," and even this should be easily discoverable.
Ensure each skill needed to solve your exercise is a reasonable prerequisite. For example, it is fair to assume that someone working on a probability exercise understands basic fractions. By contrast, for an exercise on area of a triangle, including a trigonometric identity distracts from the topic as it requires learning trigonometry before mastering area.
If not, add a new problem type. If you have more than 3-5 problem types, your skill might be too broad: consider breaking those types into multiple skills - e.g., break up "area of shapes" into "area of circles," "area of squares," etc.
Remember to include special cases, as these are sometimes the most important. For example, in an exercise about exponents, including a problem type to practice taking numbers to the 0th power is very important, as this is a difficult case for most learners.
There shouldn't be two problem types asking essentially the same question ("what is the probability that the marble is blue" and "what is the probability that the jelly bean is blue"), nor should a problem type ask two different questions ("what is the probability that the marble is blue" and "what fractions of the marbles are blue").
Map out the important cases for your skill. In our exponents example, those cases could be "positive exponents", "negative exponents", "0 power", and "0 to any power." Each of these should have one problem type.
Your hints should: (a) Give the general principle, (b) Walk the learner through how to use this principle in, this case, (c) Provide the answer
If possible, it is much, much better to show why the principle applies in this case. For a good case study, look at this exercise. For right and acute triangles, it is easy and informative to show where the formula
1/2 b * h comes from. For obtuse triangles, it is difficult to do so without using algebra, in which proficiency is not assumed for this exercise. So, this explanation is left out for the obtuse triangle problem type.
The difficult part of the exercise should be the concept you are focusing on; everything else should be as straightforward as possible. In the example of the probability exercise, the main difficulty should be figuring out what probability concept to use, not multiplying two huge numbers.
Supererogatory prolixity arrests didactic enterprises. In other words, technical or wordy language is confusing. For example, we prefer "next to" instead of "adjacent." Only use technical language when knowing this language is crucial to developing the specific skill in the exercise.