I sat around this Saturday morning clearing out some recent bugs so I could head off to Maui tomorrow with a clear conscious and enjoy my vacation. As I did so I pondered what to blog about having just given you a well received sneak preview of the next v2 release. One of today's bugs made me think it would be good to talk about the hard choices of what goes in a release and what does not. Before I go on though, if any of you readers are out in Maui in the next 1.5 weeks, send me a PM, maybe we can have a drink!
Many of you have a favorite feature request you want in the next release. Sometimes it may come complete with a fully functioning patch sitting in the tracker and it can be very frustrating to you when we decide it is not going to go in the release. "Why won't you just put it in, it's just a few lines of code and it's all right there..." is something I've encountered on more than one occasion. It may appear to be simple and sometimes things are, but more often then not they are not. Unfortunately when looking at your own feature you may not always see the subtle things it may break, and often we don't see them right away either but experience has taught us that they are there.
Needless to say, small changes can have big consequences, especially when they are sitting in a critical call flow path. The first issue that came up and was included in the original checkin was the fact that we don't even know the true "CID" of the extension until Macro(user-callerid) is executed which doesn't happen until you are in the route. Well that's just a minor change, we'll just move that instruction out of the route and in the outbound-allroutes context. Sure enough that does the trick and all looks great, or does it? Eventually someone comes along with a route that has multiple trunks and you start scratching your head wondering how a call is completing on a trunk that is not part of your route?!? Oops ... the CID is changed by Macro(outbound-callerid) so if the trunk falls through to another trunk, "everything has changed." Well that's an easy enough fix once again (after many hours of scratching your head..), We'll just reset the CID each time we exit one of the Macro(dialout-trunk) or equivalents. Now we're getting somewhere, it all seems to work, right? So far, so good but that's not to say that everything else that used to work is still working.
So ... next time you are wondering why that small feature of yours may still be outstanding, or why a knowledgeable developer may have quoted you what sounded like an exaggerated sum for something that seemed easy and small, I hope you can appreciate the job and challenge we have when evaluating such requests and considering what is in or out of a release.
For now, I'm signing off and thinking about beaches and sunshine....I'll be back in a couple weeks!
Philippe - On behalf of the FreePBX Team