Add-ins *can* be great for *some* development needs. However, they are also quite limited in comparison to a customization that is fully exposed to ArcObjects. If your implementation requires fully functional UI components and presentation forms with lots of elements (text boxes, drop-down lists, crystal reports, etc..) you will have a tough time getting those migrated to a python add-in.
If you have to rely soley upon Python Add-In and need the UI functionality, you will need to build Geoprocessing tools/scripts, which of course also provide limited UI components. The idea is to build these with user interaction processes and components and just launch them from the Add-In:
pythonaddins.GPToolDialog('C:\MyCustomToolbox.tbx', 'MyTool')
Finally, manipulating map elements can also be quite limited. For example, try adding and altering text elements on a Layout view. Seemingly simple tasks/processes easily handled with ArcObjects customized tools written in VB/C# become very convoluted and difficult to replicate with an Add-In.