Techniques and Tools to Improve the 
Salesforce Development Cycle 
Stefan Goor 
The TAS Group
Introduction 
• Who should benefit from this talk? 
– ISV Development Teams 
– Development Teams new to Salesforce 
• Traditional development techniques 
• What will be covered? 
– Reducing development obstacles 
– Managing source code 
– Automated testing 
– Improving feature development 
– Improve development cycle
Introduction 
• The TAS Group 
– Salesforce ISV 
– Several large managed packages 
• Typical challenges of large code base 
– Source Code Management 
– Collaborative Development 
• Salesforce platform doesn’t solve all the 
problems (yet?)
Salesforce Development Challenges 
Learning Salesforce 
Technologies 
Organization 
Restrictions 
Version Control 
Automated 
Testing 
Isolated Feature 
Development 
Continuous 
Integration
Reusable Development Organizations 
• No local environment for developers 
• Many developers + 1 Organization (Org) = Code Conflicts 
• Avoid development in Publishing Org 
• Org preparation takes time 
Partner Portal 
•Create Org 
•Enable Cascade 
Delete 
•Increase Apex Limit 
etc… 
Remove Default 
Content 
•Migration Tools 
Organization 
Security Settings 
•IP Addresses 
•Password Policies 
Create Users 
•Assign Permissions 
•Adjust Profiles 
Configure 
Organization 
Settings 
•Namespace 
•Enable Features 
• Solution: Create a collection of reusable Orgs
Reusable Development Organizations 
• Maintain 
List of Orgs 
• Reserve 
Orgs for 
projects 
development org Manage Orgs 
evelopment org 
development org 
development org 
development org 
evelopment org 
development org 
development org 
development org 
development org
Managing Organizations
Reusable Development Organizations 
• Deploy Source 
Code 
• Retrieve 
Source Code 
• Undeploy 
Source Code 
Migration Tools 
Special thanks to FinancialForce for 
their deployment tools
Migration Tools 
• Deploy 
– Reserve Org in Org List 
– Substitute Namespace 
– Push source code to 
Organization 
• Retrieve 
– Export Source Code 
– Remove Org Specific references 
• Undeploy 
– Blank all code 
• Apex Classes 
• Apex Triggers 
• Formulas 
• Visualforce Components 
• Visualforce Pages 
– Deploy blanked content 
– Undeploy hierarchical rollup 
fields in sequence 
– Remove remaining content 
MAigpMratcaihnoeun a ATlon Sott leTsap Tssakssks – Update Org List
Salesforce Development Challenges 
Learning Salesforce 
Technologies 
Organization 
Restrictions 
Version Control 
Automated 
Testing 
Isolated Feature 
Development 
Continuous 
Integration
Automated Version Control 
Benefits of Version Control 
Branching & Merging 
Code history / audit trail 
Collaborative development 
Prevents lost code
Branching & Merging 
• Branching 
– Create a clone of project (files & directories) 
– Manages changes in isolation of original project 
– Original project branch referred to as trunk 
• Merging 
– Reintegrate changes from one branch to another 
– Merges work in both directions 
– Merging may require manual conflict resolution 
TRUNK 
Project
Automated Version Control 
developer org 
developer org 
developer org
Salesforce Development Challenges 
Learning Salesforce 
Technologies 
Organization 
Restrictions 
Version Control 
Automated 
Testing 
Isolated Feature 
Development 
Continuous 
Integration
Automated Testing 
• Validate new or changed code 
• Special Org reserved for Testing 
• Salesforce Migration Tools 
– Test Deploy 
– Run All Tests 
• Jenkins Continuous Integration (CI) Server 
– Schedule apache ant & migration tool jobs 
• Daily 
• As Needed 
– Notification of any failures (including logs)
Automated Testing 
testing org 
Source Code: 
Apex, 
Visualforce etc
Salesforce Development Challenges 
Learning Salesforce 
Technologies 
Organization 
Restrictions 
Version Control 
Automated 
Testing 
Isolated Feature 
Development 
Continuous 
Integration
Isolated Feature Development 
• Keep different projects / features separate 
– 1 Feature : 1 Development Org 
– Create a Subversion (SVN) Branch for feature 
– Deploy branched code to Org 
• Reintegrate new features to core application 
– Safely extend managed packages 
• Prevents accidental dependencies 
• Reduces source code conflicts
Feature Branching in Force.com 
development org 
Retrieve 
Feature A 
publishing org 
Retrieve Deploy 
TRUNK 
publishing org 
Deploy 
• Trunk contains Publishing Org code 
• Branched of trunk is deployed to development Org 
• Merge back to trunk when feature complete 
• Deploy merged code to managed package org and create betas / managed package 
• Development Org can then be undeployed and recycled
Salesforce Development Challenges 
Learning Salesforce 
Technologies 
Organization 
Restrictions 
Version Control 
Automated 
Testing 
Isolated Feature 
Development 
Continuous 
Integration
Continuous Integration 
• Each of our Salesforce Apps has 
– Packaging Org 
– Patch Org(s) 
– Feature Org(s) 
• Bug fixes need to propagate to all Orgs 
– From earliest version forward 
• Automatic merges 
– Only if 
• no conflicts in merge 
• no test failures in branch being merged 
– Successful merge deployed to org
Continuous Integration 
• Ant tasks for SVN merge 
• Automatic (Jenkins) merge order 
– Start at earliest patch org 
– Merge incrementally to other patch orgs 
• 1.1 to 1.2, 1.2 to 1.3 etc 
– Merge latest patch branch to Trunk branch 
– Merge trunk to all feature branches 
• Manual only merges 
– From Trunk to new patch orgs 
– From Features orgs to Trunk
Merging Example 
TRUNK 
1.1 
1.2 
1.3 
Patches Features 
A B 
C
Salesforce Development Challenges 
Learning Salesforce 
Technologies 
Organization 
Restrictions 
Version Control 
Automated 
Testing 
Isolated Feature 
Development 
Continuous 
Integration
Useful Links 
• Migration Tools 
– http://www.salesforce.com/us/developer/docs/daas/ 
• Apache Ant 
– http://ant.apache.org/ 
• Jenkins CI 
– http://jenkins-ci.org/ 
• Subversion 
– https://subversion.apache.org/ 
• FinancialForce deployment tools 
– https://github.com/financialforcedev/df12-deployment-tools 
• Force.com CLI 
– https://force-cli.heroku.com/
Q & A

Techniques and Tools to Improve the Salesforce Development Cycle

  • 1.
    Techniques and Toolsto Improve the Salesforce Development Cycle Stefan Goor The TAS Group
  • 2.
    Introduction • Whoshould benefit from this talk? – ISV Development Teams – Development Teams new to Salesforce • Traditional development techniques • What will be covered? – Reducing development obstacles – Managing source code – Automated testing – Improving feature development – Improve development cycle
  • 3.
    Introduction • TheTAS Group – Salesforce ISV – Several large managed packages • Typical challenges of large code base – Source Code Management – Collaborative Development • Salesforce platform doesn’t solve all the problems (yet?)
  • 4.
    Salesforce Development Challenges Learning Salesforce Technologies Organization Restrictions Version Control Automated Testing Isolated Feature Development Continuous Integration
  • 5.
    Reusable Development Organizations • No local environment for developers • Many developers + 1 Organization (Org) = Code Conflicts • Avoid development in Publishing Org • Org preparation takes time Partner Portal •Create Org •Enable Cascade Delete •Increase Apex Limit etc… Remove Default Content •Migration Tools Organization Security Settings •IP Addresses •Password Policies Create Users •Assign Permissions •Adjust Profiles Configure Organization Settings •Namespace •Enable Features • Solution: Create a collection of reusable Orgs
  • 6.
    Reusable Development Organizations • Maintain List of Orgs • Reserve Orgs for projects development org Manage Orgs evelopment org development org development org development org evelopment org development org development org development org development org
  • 7.
  • 8.
    Reusable Development Organizations • Deploy Source Code • Retrieve Source Code • Undeploy Source Code Migration Tools Special thanks to FinancialForce for their deployment tools
  • 9.
    Migration Tools •Deploy – Reserve Org in Org List – Substitute Namespace – Push source code to Organization • Retrieve – Export Source Code – Remove Org Specific references • Undeploy – Blank all code • Apex Classes • Apex Triggers • Formulas • Visualforce Components • Visualforce Pages – Deploy blanked content – Undeploy hierarchical rollup fields in sequence – Remove remaining content MAigpMratcaihnoeun a ATlon Sott leTsap Tssakssks – Update Org List
  • 10.
    Salesforce Development Challenges Learning Salesforce Technologies Organization Restrictions Version Control Automated Testing Isolated Feature Development Continuous Integration
  • 11.
    Automated Version Control Benefits of Version Control Branching & Merging Code history / audit trail Collaborative development Prevents lost code
  • 12.
    Branching & Merging • Branching – Create a clone of project (files & directories) – Manages changes in isolation of original project – Original project branch referred to as trunk • Merging – Reintegrate changes from one branch to another – Merges work in both directions – Merging may require manual conflict resolution TRUNK Project
  • 13.
    Automated Version Control developer org developer org developer org
  • 14.
    Salesforce Development Challenges Learning Salesforce Technologies Organization Restrictions Version Control Automated Testing Isolated Feature Development Continuous Integration
  • 15.
    Automated Testing •Validate new or changed code • Special Org reserved for Testing • Salesforce Migration Tools – Test Deploy – Run All Tests • Jenkins Continuous Integration (CI) Server – Schedule apache ant & migration tool jobs • Daily • As Needed – Notification of any failures (including logs)
  • 16.
    Automated Testing testingorg Source Code: Apex, Visualforce etc
  • 17.
    Salesforce Development Challenges Learning Salesforce Technologies Organization Restrictions Version Control Automated Testing Isolated Feature Development Continuous Integration
  • 18.
    Isolated Feature Development • Keep different projects / features separate – 1 Feature : 1 Development Org – Create a Subversion (SVN) Branch for feature – Deploy branched code to Org • Reintegrate new features to core application – Safely extend managed packages • Prevents accidental dependencies • Reduces source code conflicts
  • 19.
    Feature Branching inForce.com development org Retrieve Feature A publishing org Retrieve Deploy TRUNK publishing org Deploy • Trunk contains Publishing Org code • Branched of trunk is deployed to development Org • Merge back to trunk when feature complete • Deploy merged code to managed package org and create betas / managed package • Development Org can then be undeployed and recycled
  • 20.
    Salesforce Development Challenges Learning Salesforce Technologies Organization Restrictions Version Control Automated Testing Isolated Feature Development Continuous Integration
  • 21.
    Continuous Integration •Each of our Salesforce Apps has – Packaging Org – Patch Org(s) – Feature Org(s) • Bug fixes need to propagate to all Orgs – From earliest version forward • Automatic merges – Only if • no conflicts in merge • no test failures in branch being merged – Successful merge deployed to org
  • 22.
    Continuous Integration •Ant tasks for SVN merge • Automatic (Jenkins) merge order – Start at earliest patch org – Merge incrementally to other patch orgs • 1.1 to 1.2, 1.2 to 1.3 etc – Merge latest patch branch to Trunk branch – Merge trunk to all feature branches • Manual only merges – From Trunk to new patch orgs – From Features orgs to Trunk
  • 23.
    Merging Example TRUNK 1.1 1.2 1.3 Patches Features A B C
  • 24.
    Salesforce Development Challenges Learning Salesforce Technologies Organization Restrictions Version Control Automated Testing Isolated Feature Development Continuous Integration
  • 25.
    Useful Links •Migration Tools – http://www.salesforce.com/us/developer/docs/daas/ • Apache Ant – http://ant.apache.org/ • Jenkins CI – http://jenkins-ci.org/ • Subversion – https://subversion.apache.org/ • FinancialForce deployment tools – https://github.com/financialforcedev/df12-deployment-tools • Force.com CLI – https://force-cli.heroku.com/
  • 26.

Editor's Notes

  • #4 Mention that TAS moved from Java based dev Particularly relevant to those familiar with traditional development approaches