I hear what you are saying David, and I get the rationale behind it. But when the time frame for a critical software development is measured in years (with nothing ever released), you guys are killing your app developers. I know this topic has been beaten into the ground and I won't start up with the bird in the hand vs. two in the bush, but at some point you have to just bring a product to market-- delaying a product feature like discounts for several years is insane.
But instead of that old argument I will offer this instead, why not introduce simple basic features now in a modular fashion (so you can roll out more and more later)?
It seems to me that if we were able to do three simple functions via api, the average developer could finally build many of the killer apps we've been waiting for:
1) Create the type of Discount (which includes the rules applied)
2) Create one time use codes (or deactivate codes)
3) Set time frames for coupon code life
For number one, the type of discount (percentage, dollar off etc.) would be modular (you could then expand out the choices to more and more complex options- buy X get one free etc.). So too would the rules applied (applies to any order, orders over X amount, orders with certain products etc.). Since both the rules types would be modular, just start out with the basics. Simple percentage or dollar off, and apply to any order. Two types, one rule. VERY simple.
This minimal functionality obviously won't be enough to handle every user's needs, but would work for a lot of (most?) applications right off the bat. Then roll out more and more types and rules as you have the chance to dream them up and test them. And if you start with the basics and roll more out as you go along (when they are ready, however shopify decides that they are) you don't have any "oopsies" or "changing everything now" scenarios you mentioned. Structure (method) stays the same, only the options available change.
#2 and #3 are simple. Once a discount is created, you just have a one-to-many of discounts and code. Each code gets a start and end date for coupon life (or could be left open until canceled). Codes can only be redeemed once and they expire. That's it.
So instead of punishing the majority of folks who could at least get by with the very basic system described above by making them wait many years for a perfect system to be written, get them up and running and bring a whole new class of apps to market... NOW. Then, as you get the chance to implement uber cool new rules and types, you roll them out incrementally by folding them in.
Timing arguments aside, how would that not give Shopify the chance to ultimately make the product as complex and nuanced as they want, while at the same time give developers the vital tools they have been waiting for since the beginning of apps? Is there any reason an approach like that wouldn't work?
I've already abandoned the product I was working on before because it was apparent that this functionality was not coming down the path anytime soon. I just checked back to see where things stood a year(?) later, and no progress. It can't be that hard... it just can't.