Asterisk developer new to FreePBX

All;
I am an Asterisk developer that is new to FreePBX. I’m in the process of porting my software (an advanced user portal) to FreePBX but I have to say that it is a frustrating process. I mean, just trying to figure out the find me/follow me feature is confusing. First of all, why does the administrator have to configure FMFM for a user at all? All of it should be done by the user so the admin does not have to waste any time configuring user options. Then the user portal only has a few of those options available. Some of the options are stored in the Astdb, while more of them are stored in MySQL. Then the followme contexts get rewritten in extensions_additional.conf with the MOH playlists hard coded into it? I mean WTF?

So my question is this. Where do I even begin to start reading to try to understand the logic, the methodologies used, and the internals of FreePBX so that this starts to make sense? Although right now I’d get worried if this started making any sense at all to me. Maybe I just need to start digging into it deeper for me to change my mind.
Thanks for letting me rant.
FSD

The code has grown quite organically, so to speak, which has made much of it rather complicated and hard to follow. So the reason for things does not always make sense or may not always be that intuitive. (Kind of like the Asterisk code base :))

But to help understand why the Administrator needs to setup a follow-me, it’s because some administrators may not want all users to have a Follow-Me. As far as why everything is not exposed to the end user, it’s because there are different opinions of what should and should not be exposed to the end user before things either get too complicated for most end users to understand, or where an administrator may not want to support certain things. (Like they may not want to support certain ring strategies, etc).

But all the complications you are running into trying to understand this code is exactly why we are overhauling on 3.0 and starting from scratch, so that hopefully over time as it evolves and eventually replaces 2.x, it will be much easier to come to speed. (Though that will be some time still, it’s still in DEV state).