Why is UAG so unique in this realm?
Two things make UAG an exceptional product from a customization point-of-view. First, it includes a mechanism that makes it easy to add, change, or remove custom code with a reduced risk of causing harm to the default core code. This mechanism, commonly known as CustomUpdate, allows the customizer to populate specially designated folders with custom files, and UAG's engine automatically detects these files and incorporates them into its code. For example, if you want to have the portal display your own icon when showing Citrix applications, all you have to do is create the graphic file, name it appropriately, and place it in the correct folder. UAG will recognize it right away, without you needing to configure any settings or edit any complicated configuration files. Don't like the change? Remove the file, or overwrite it with another, and your changes are applied right away.
Secondly, a significant portion of UAG's code is written using Active Server Pages (ASP), Microsoft's Web application framework. This means that you can open and read some of UAG's code directly off your server, without having to plough through mountains of API documentation. This doesn't mean it's a piece of cake following the hundreds of code files and the interlinking between them can be quite challenging, but almost all of the code is available to anyone, and you don't even have to install expensive development studio suites.
On the other hand, customizing the code is not going to be a walk in the park, we can promise you that. Besides having tons of ASP code to melt your brains, you will find out that the code flow is mostly undocumented, and unless you are a veteran developer yourself, you may find it hard to understand exactly what does what, and where you can add stuff without risking stability. Additionally, big parts of UAG's code go back many years into the past, to the days the first generation of the product was developed. Some parts of the code have been around for many years, and some may be completely irrelevant to the product's operation, but were kept for backwards-compatibility. This may cause some confusion, at least until you get the hang of things. In addition to all of the preceding info, the code, as far as ASP is concerned, includes a mix of COM objects, ActiveX, Java, HTML, CSS, and JavaScript code. For some customizations, you will need to know many or all of them to be able to follow it through. Are you up to the challenge?