Salesforce.com Advanced Developer Certification

It took me a couple tries but I finally finished my Force.com Advanced Developer Certification. It was harder than I expected – and easier. I wanted to share a little bit of my journey and some tips for those of you working towards the same certification.
My background: I already knew how to code. I used to write C/C++ and if I am hard pressed I can still throw down some mean Java. But I have since moved on (so I thought) in my career to really important things. You know, like management (meetings), architecture (drawings), governance (LOTS of meetings), and project management (taking notes). When I was introduced to Salesforce I had no interest in going back to my coding roots. But as I got to know the platform I realized how much I loved it. I decided to go after the architect certification (read about that here). The only prerequisite for the CTA (Certified Technical Architect) is the Salesforce.com Developer certification. I had a feeling that would not be enough pre-requisite knowledge for me and that in order to be a great architect I would need to know the ENTIRE platform. So I set a goal of obtaining all of the certifications, including the Advanced Developer. (BTW I was correct – developer certification in no way prepares you for CTA!)
In order to learn Apex and Visualforce I started with Jason Ouellette’s book: Development with the Force.com Platform. This was a great book as it was very easy to follow, didn’t assume I was an idiot, and got right into the heart of true Force.com development (which sadly yes DOES require coding). Walking through this book and building out the examples you have a great understanding and basis for moving forward as a developer on the platform. But I was not stopping there – I needed to master it. I had already taken DEV401 in the classroom however I decided NOT to take a formal classroom class for DEV501. For me, doing is better than listening. Besides there are a tons a great resources online these days to help you get started. You have to DO the work in order to learn it.
Here was a list of the resources I used as I was learning Apex and Visualforce: (no particular order)
1) Development with the Force.com Platform, Jason Ouellette
2) Advanced Apex Programming, Dan Appleman (This really helps you start to understand writing scalable apex code – far beyond the simple concepts of managing for loops)
3) Jeff Douglas’s blog (An amazing collection of articles that help you to understand how far you can take the platform)
4) Keir Bowden’s (Bob Buzzard?) blog (Keir is truly an expert at Visualforce and especially incorporating Javascript into Visualforce)
5) Force.com Apex Code Developer’s Guide (Read through all the chapters leading up to the reference section – 15 Chapters as of Summer 14)
6) Visualforce Developer’s Guide (Once again – read through the first 21 Chapters leading up to the Standard Component Guide)
7) Apex (Salesforce.com’s own online premier training if you have access – I did this in lieu of the DEV501 class)
8) Visualforce Controller’s (also in lieu of DEV501)
9) Managing Development with Force.com (also in lieu of DEV501)
10) Visualforce in Practice (Michael Floyd, Don Robbins, et al.)
11) Visualforce Development Cookbook, Keir Bowden
12) Salesforce’s Workbooks on Apex and Visualforce
And lastly – I wrote production code. I got assigned to projects that I would not just be managing (meetings) and architecting (drawings) but doing real role up my sleeves coding. I refactored triggers. I built integrations. I used Javascript. I built killer test coverage. I didn’t just try to absorb the knowledge I had to apply it.
Now onto the certification itself. This certification process has been covered in great detail by some great posts so I will not explain it here. I will say that getting access to the written assignment on webassessor is a MAJOR pain and is like trying to get concert tickets or something. Plan on having multiple computers, multiple browsers, lots of patience, and be ready to go the SECOND the assignment window opens. I would recommend just grabbing any slot for your written essay, you can always change the date/time of your essay after you have confirmed your spot in the window. I timed out multiple times trying to find the perfect appointment spot. Just take whatever you can get the moment you can – and then change it later after the craziness has died down.
My first time taking the written assignment I was pretty overwhelmed based upon the size of the requirements and the time I had expected 20-30 hours? to take. This may be different for you, but I thought it was a pretty good size assignment. I hit a major platform bug using AJAX and Select Lists. (If I ever get a free minute I plan to fully document this bug and try to get it resolved). The bug REALLY threw me off and rather than changing my architecture I decided to write JavaScript around the bug. I will warn you right now: DO NOT USE JAVASCRIPT UNLESS YOU ABSOLUTELY HAVE TO! I figured that my solution was not ideal but I really didn’t want to change my architecture. I documented my reasons for using the JS in my code and on my essay. Alas it was no good – I failed my first attempt.
My second attempt was much much easier. Why? The assignments were almost identical. I was able to use a lot of my existing work on the first assignment towards the second. (I don’t know if this is always the case). But I will say that after taking two different assignments it is clear that there is a pretty clear grading rubric and the judges are (at least were) looking for a very specific solution. And my second attempt did NOT require that dumb select list which was so buggy in AJAX! (By the way the easiest work around with the bug I found was just to do a complete post back on the select list change and just forget about AJAX).
My tips for you:
1) Don’t touch your developer production org other than to deploy your code and to test what you have deployed – use the sandbox for any and all config/dev and use changesets/IDE/API to do your deployments.
2) Don’t only test with data volumes in your test coverage – take the time to create some data loader files and load some large volumes to test your solution’s scalability.
3) Validate you have met ALL the requirements, including looking for how your undeletes work. Validate and sum up your data calculations manually. Make sure nothing has fallen out in your scalability code.
4) Know how to scale a trigger for complex calculations (hint).
5) Know how to scale a visualforce solution for high data volumes (StandardSetControllers, SOQL offset, etc).
6) Cover every requirement that you can with test coverage. Make sure to assert your expected behaviors.
7) Use runAs in your test coverage to test the solution using the profiles you expect.
8) Test the security of your solution in your test code. Make sure to test positive and negative cases.
Both assignments took about 2 months for me to receive my feedback. I’m super happy that I passed and now can get back to my real job of architecture (drawings) and management (meetings). But now that I’m dangerous with Apex and Visualforce perhaps you may find me behind the keyboard of an appexchange app coming to a store near you?