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.
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
In general, most software developers are not employed in jobs that promote good coding principles. Look for people who have always sought to increase their skills and learn new things, outside of the scope of their current position. Even the most senior developers may not adopt the level of professionalism that you require from your teammates. In hiring, you need to make sure potential candidates have the drive and ability to perform well. Your team will create the culture of craftsmanship that helps new team members aspire to be better than they are today.
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
- Unit Testing
- Dependency Injection
- Ability to program in additional languages (Ruby, C#, Groovy, etc.)
If successful with the phone screen, an in-person interview should be held. You should have several people involved in this interview. During an active recruitment cycle, many in-person interviews can create time constraints on the interviewers. This is unavoidable. The interview team needs to accept that the time commitment is necessary, and plan their time appropriately.
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
Now, let’s look at Alfresco. Alfresco is a fairly complex product that leverages a broad spectrum of tools. A new developer is challenged with learning how to configure and customize Alfresco. Here is a sample learning path:
- 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)
These tools should be integrated together. A source code change should launch a build in the continuous build server. That build should trigger code analysis, and possibly a release build to be stored in the Maven repository. Ideally, all source code changes should have a mechanism to integrate with an issue tracking system. You can do this by having a pre-commit hook to enforce a JIRA ticket be entered with each code check-in.
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.
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
For more advanced development teams, you can also build customizations to bootstrap:
- Data Lists
- Re-usable Access Control Lists
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.
- Web Scripts. Essentially a RESTful API exposing your action and service classes.
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.
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 firstname.lastname@example.org.