How to Create a High Performance Alfresco Development Team
Creating a high performance Alfresco development team does not happen by accident. You need to build a team of professional developers, with a consistently adopted development methodology.
People First
Hiring good teammates is the riskiest part of building a development team. Mistakes here are costly, with their ill-effects long reaching. Define the profile of the person you would like to hire. For a developer, some common traits are:- Problem Solver
- Continuous Learner
- Professional Work Ethic
- Good Communicator
- Team Player
- Community Contributions
- Technology Experience
The Interviews
Phone interviews are a must for getting a base level of confidence in a candidate's abilities. While there is no particular list of technical skills that a candidate must have, it is useful if the candidate can profess knowledge on the following areas:- Core Java
- Familiarity with Java web servers (i.e. Tomcat)
- Object Oriented Knowledge
- Restful Web Services
- HTML
- JavaScript, JSON, jQuery
- Unit Testing
- Dependency Injection
- Ability to program in additional languages (Ruby, C#, Groovy, etc.)
In preparation for the in-person interview, there should be a workstation ready for the candidate to use during a coding exercise. It is critical that you have the candidate write code during the interview. This is one of the best ways to get insight on the candidate’s capabilities.
Even with all the technical criteria satisfied, you still need to ensure that the candidate is a good fit for the team. Are they a constant learner? Do they enjoy working with other people? Can they put their ego aside to learn from everyone? Do they aspire to be greater than they are? When you are looking to hire people start by using your network. ‘Who: The A Method for Hiring’ by Geoff Smart and Randy Street is a fantastic book on the method for hiring good people.
Remember that this is your big chance to avoid a costly mistake. Every time you hire a new team member there is the potential that you may have to fire them if it doesn’t work out. It is better to have a tough interview process then to later fire a poor-performing team member for issues that could have been vetted in the interview process.
You're Hired! Now What?
Before starting Alfresco project development, all team members need to be on the same page regarding the best practices to which they are held accountable. As a profession, Software Development is in its infancy. Accountants, Doctors, and Engineers all have standards and codes to which they are held accountable. Software Developers do not have such widely accepted and enforceable standards. If you'd like to have a highly successful development team, you need to establish a set of standards that ensure your team's professionalism.You need to have a developer code of conduct that provides clear language on those expectations. The developer code of conduct enforces a level of professionalism and craftsmanship not typically seen in software development. If you don’t have something like this in place, I highly recommend you start by viewing a presentation titled ‘The Reasonable Expectations of your CTO' by ‘Robert Martin’. Building on the code of conduct, it is also useful to have a set of standard operating procedures in relation to how your code is written, and your development methodology. Again, if you’re starting from scratch, I recommend you start by providing all new hires the following three books:
- The Clean Coder by Robert C. Martin
- The Clean Code Handbook by Robert C. Martin
- The Agile Samurai by Jonathan Rasmusson
- An Alfresco Architecture Overview
- Alfresco Tutorials (Start with Jeff Potts' tutorials on http://www.ecmarchitect.com)
- An Alfresco Bootcamp. This can be Alfresco provided training, or a home grown bootcamp based on your in-house skill set and project needs.
Your Operating Tools
Every developer needs to have an awesome computer, preferably a laptop. You should leverage free and open source tools where possible. For commercial tools, IntelliJ and JRebel provide a great return on investment in terms of software quality and developer efficiency.Other tools that should be part of your infrastructure are:
- A virtualized server environment. If you have the ability to do this on your own bare metal that's great. Otherwise, there is a plethora of cloud options available (Azure, Amazon, etc.)
- Source Control Server (Subversion, Git)
- Continuous Build Server (Jenkins)
- A Maven Repository (Sonatype Nexus)
- Local Code Analysis (IntelliJ & Visual Studio have good tools)
- Centralized Code Analysis Server (Sonar)
- Issue Tracking (JIRA)
Let's Get Coding with Alfresco
The easiest way to start developing with Alfresco is to leverage the Alfresco Maven SDK. For more information, a great resource is Gabriele Columbro's blog. By leveraging maven, new team members can quickly get a local development environment up and running.Bootstrap Everything!
Alfresco has a wonderful mechanism to bootstrap your customizations into a custom module, called an AMP. This makes it easy to create a specialized deployment for Alfresco, without repeating deployment steps for each new environment. Common items for bootstrapping are:- Metadata Model
- Folders
- Rules
- Users
- Groups
- Sites
- Data Lists
- Re-usable Access Control Lists
Basic Configuration
Virtually every Alfresco project has a set of core configurations that need to be implemented.- Custom Metadata
- Share Details Page(s)
- Share Search Page(s)
- Basic Branding
- User, Group Integration [This is often an integration and synchronization with a LDAP user directory]
Common API Customization
Once you get past basic configuration, you'll need to write some custom code to implement additional features. Jeff Potts' tutorials are an excellent place to look for technical direction. Typically, these customization include:- Custom Service classes. These will be the base implementation of your custom logic.
- Actions. Typically ActionExecutor classes. These will expose your service classes' functionality to Alfresco's Action framework, making them available for use in Rules, JavaScript, Java, etc.
- Web Scripts. Essentially a RESTful API exposing your action and service classes.
Workflow
Alfresco leverages Activiti as its core BPMN 2.0 compliant workflow engine. A custom workflow typically involves the following customizations:- Custom Model
- BPMN Diagram
- Share Task Screens
- Custom Task Listeners.
Go Team!
As a high performing Alfresco development team, you need to be accountable for the quality of your deliverables. Unit testing should be pervasive within your application. All task should be estimated, and have their actual effort recorded for traceability. Code analysis tools should display zero violations, high coverage, and few duplications.While everything discussed above may not be easy, it is a roadmap for defined and repeatable success. It provides your team with clearly outlined guidelines on behavior, and provides the necessary tools for team accountability.
If you have any questions, please feel free to email me at jason@jasonjolley.com.