Feeds:
Posts
Comments

I have often been asked what is looked for in technical candidates and what skills people need to develop in order to progress in a technical career path.   Typically long lists of technology, languages and certificates on a CV/resume don’t do much for me.  If the list is long it is likely that the candidate doesn’t really have deep knowledge in any of them.  Equally technology changes so rapidly that knowledge of particular languages or platforms rapidly becomes redundant replaced with something new and shiny.  For all of those reasons I have always considered the following to be the most important areas

  1. Ability to rapidly learn new technologies
  2. Problem solving ability
  3. Communication (with people)

Of these the third is the easiest to explore in an interview asking the candidate to explain some area of technology or some project they have worked on.  If they can’t explain clearly or use too much jargon you have an issue – no developer/architect is an island.  Ask them to assume you have no technical background and to explain in clear English something technical they worked on.

The area of problem solving can be tackled in a couple of ways either by written tests, or  posing problems during the interview.  A good approach is to give some realistic real world problem and ask the candidate how they would solve it.  Provide them paper, whiteboards etc.  Good candidates will first ask questions before drawing data models and architecture.  The main point is to understand the process they would go through in breaking down the problem and of course is a bonus if they come up with innovative approaches on the fly to solving it.  Depending on time you can probe areas such as performance, security and integration of the solution suggested.  For a more rigorous approach for interviewing developers checkout Joel Spolsky’s Guerilla guide to interviewing

The hardest area to measure is someones ability to rapidly learn a new technology.   You could for example ask someone to go learn and present on some technology with a demo although this is rather artificial.  Another area to consider is which technologies the candidate has recently learned and applied. Another strong indicator is the passion they have for technology both inside and out of work – if they start talking about modules they contributed to Apache in their spare time then you have struck gold.  It is also important to recognise  how we learn new things which is mainly through comparison to existing knowledge.  This type of pattern matching of course does require some foundations to draw on.  Below then are some of the foundations that will help someone in being able to rapidly learn and apply new technologies.

For each of the following topics it is important that a candidate has at least an understanding of the concepts and ideally practical experience using at least one of the languages/tools.  These are transferable skills that are not constrained to particular applications or domains and should continue to be a valuable foundation for any new technologies / approaches going forward.

  • Design Patterns – The bible for developer design patterns is still the classic ‘Gang of Four‘ book.  These patterns are now a part of the developer vocabulary and have been adopted by most modern languages and frameworks.  The other essential reference is Martin Fowler’s Patterns of Enterprise Application Architecture.
  • OOP – Object Oriented principles continue to permeate all modern languages and architectures.  Experience of Java or C# should ensure a good exposure to the concepts of encapsulation, interfaces, inheritance, polymorphism etc
  • AOP and IoC – understanding of these paradigms and experience of using them with particular frameworks
  • Frameworks such as Spring, Hibernate, Struts, Rails, Symphony, Django – just knowing a language is not enough anymore as many applications now rely on frameworks and these kind of frameworks ultimately when used correctly should result in less effort and code to be written.  These frameworks typically utilise several core patterns such as MVC, ORM, DI etc
  • Web based development – with understanding of HTTP, REST, SOAP, XML, JSON and Javascript libraries such as JQuery, Prototype, SproutCore
  • Dynamic interpreted languages such as Python, Ruby – these are expressive languages that can require few external libraries and can result in very compact readable code.
  • Build tools and continuous build/integration ie ant, maven, cruisecontrol
  • Source code control cvs, svn, git
  • Testing – unit tests, TDD. Here are some examples of Java testing tools
  • IDE’s – familiarity with a mainstream IDE such as Eclipse or NetBeans and how to use/configure tools within it such as debugging, version control, build control, etc

A book that I often recommend is The Pragmatic Programmer which encourages developers to embrace many of the areas above as part of a continuing investment in themselves and their career.

A good refresher and selection of technical interview type questions can be found in this blog by Michael Knopf.

Software is changing at an ever growing pace with areas such as cloud computing and social networking expanding rapidly so keeping on top of these developments will continue to be a challenge for developers and architects.  However given a solid foundation as outlined above it will enable such new developments to be quickly absorbed and understood.

There is alot of discussion around how Twitter search can be improved including the following recent post on Mashable.  The following then are my thoughts on how Twitter Search could evolve.

In some ways the evolution of Twitter is not dissimilar to that of the World Wide Web.  That evolution firstly involved an ever increasing number of sites and then the tools and technology evolved and indeed continue to evolve today.  Twitter has grown rapidly and tools are emerging.  One of the key steps for the Web was providing a powerful search mechanism to access the wealth of information contained in those websites.  A similar challenge is now facing Twitter – how to search effectively to find those nuggets of information and trusted sources. Google’s approach of PageRank for websites revolutionized searching for information across websites as the results returned were deemed to come from more trusted and reliable sources.

So the question is what is the equivalent of the Google PageRank for Twitter ?  How does a user qualify as being a trusted and reliable source ?

A possible TwitterRank algorithm that could be used to index Twitter users could help in facilitating more powerful search could comprise of the following

  • Parsing and extraction of high frequency keywords/tags (eg open source, CMS, CMIS) of recent posts by a user (ie last 200 posts) – this approach could use one of the many Information Retrieval algorithms and leverage stemming and synonyms
  • Analysis of content in links could also contribute to keyword/tags for the user
  • Frequency and age of posts
  • Ratio of high scoring keywords to number of posts ( ie 1  in 4 posts contain high scoring keywords)
  • Number of followers with similar high scoring keywords – potentially ratio of these followers to overall followers, though penalizing for having non-relevant followers might be unfair it could help combat the mass follower practise
  • Content of bio and bio link also contributing to keyword score

This TwitterRank would then be used in sorting the search results for particular keywords.  The goal would be that the people who score highly on the keywords that are searched for have their recent posts returned higher than others as the scoring would indicate they are more active and contribute alot on this topic as well as having a high number of equally relevant followers.

Agile software development and project management has become much more mainstream in recent years.  This is reflected in the increasing  number of blogs and books available on the subject.  But for someone approaching the subject fresh it can seem somewhat overwhelming and unclear where to start.  It can also look like you have to go read 20 books just to understand it.  Which is unfortunate as underpinning the whole approach are some very clear and simple edicts from the Agile Manifesto :-

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

Agile then in it’s purest simplest form is about removing layers of complexity and unnecessary paperwork and processes in software development.  It is really about working closely with the customers and end users and iteratively evolving the software to meet their needs.  Understanding these principles is important and can serve as a guide to understanding how to navigate through the many agile techniques and tools.

Agile projects still contain the same kind of ingredients as any software development project namely

  • gathering and documenting requirements
  • planning and estimating
  • development cycles
  • testing
  • managing change

Where Agile often differs from other software development approaches is in the quantity and order of these ingredients in the recipe, by doing just enough requirements gathering and iterating quickly through build/feedback loops.  Estimating is still important to see what areas can be addressed during those iterations but often actual team velocity as measured through initial iterations is a better guide to future progress.  You don’t plan too far ahead so the next iteration can be determined based on emerging requirements or understanding.

The tools of an Agile team

Often associated to Agile projects but really just pragmatic best practise techniques versus anything inherent in an Agile approach

  • User centric stories to describe requirements leading to Agile goal of less documentation
  • Wireframing visual design – much quicker and easier to change than developing UI using software
  • Relative estimation and team based estimating
  • Time boxed iterations
  • Test driven development
  • Retrospective review cycles
  • Automated and continuous build/integration

However which of these you choose to adopt very much depends on the needs of the project and the situation at hand.  Keeping it simple is key as well as adapting based on the experience of both the team and client.  Trying to get a team to adopt new approaches completely alien to them will often result in failure.  In the end Agile should be about people interacting which should be very natural and processes and procedures should be minimal and not interfere with progress.

In the end you need to adopt the approaches, techniques and tools that are appropriate to the project, team and client and this will often vary.  Agile techniques can be very effective but the key is embracing the underlying principles as outlined in the manifesto and not getting lost in acronyms and debates about methodologies.

Useful resources on Agile approaches

Books

The increasing number of social networks and platforms being used is offering different channels for businesses to engage and interact with their customers throughout the customer lifecycle.  There are also geographic considerations to be taken into account, for example Orkut is extremely popular in South America so is the right network to use when reaching clients in that region.

The typical customer lifecycle from the perspective of a customer is as follows

  • Awareness / research
  • Purchasing
  • Using product/service
  • Purchase add ons or enhancements (perhaps goes back to first step)
  • Getting help/support

The awareness/research, purchasing  and support phases are typically where people like to interact with other people to see what decisions and answers they might have – the wisdom of the crowds.  People often steer clear of marketing, adverts or callcentres in these cycles.

Awareness / research

People prefer to research by discussing with friends and looking on comparison sites and looking at consumer reviews.   The following are good approaches to engage in this cycle in a non-invasive manner.

  • Provide rich content on community sites focused on relevant subjects/products.  This is effectively content/application syndication.  Providing content / interactive tools (ie questionnaires, calculation tools) is much better received than simply pushing adverts that few people click on.  Optaros has developed a cloud based solution for syndicating this kind of content called OView.
  • A number of businesses are now appointing a community manager role in their organisation to go out to the forums and sites that people are interacting on and join the discussions.  A good example of this is hotels that interact on sites like TripAdvisor by responding to concerns raised and sharing information.  This can also include being active on microblogging services such as Twitter.
  • Equally if people find a product on a site during their research then enabling them to customise/share it with their friends/family on social networks such as Facebook can help spread the word through viral means.   Optaros Labs have done some research in this area with a product called FANS

Purchasing

Once people have done all their research and made their decision to purchase they often want to share what they have bought – particularly if it is fashion, style related or heavily customised.  This is a good opportunity to help enable this by allowing info about the purchased item to be shared through social networks directly.  Some good examples of this approach are as follows :

  • Mydeco – allows people to configure and design rooms and then save their configuration, tag and share it
  • Nike – allows custom design of shoes, saving into your own locker and sharing with friends

Getting help/support

More and more people want a quick response that solves their issue so Google and social networking sites end up taking precedence over callcentres.  This means businesses have the opportunity to participate and provide dynamic support through channels such as Twitter and Facebook.  Related to this is having rich media freely available such as webinars, podcasts, videocasts, slides and having them tagged and available on sites such as Slideshare, iTunes store, youTube etc.  Equally important is having knowledgeable employees active on the various community sites and contributing through blogs.  Salesforce.com has recently offered Twitter integration into it’s customer service product to help capture and flag relevant discussions taking place.  This can also be taken further with semantic analysis of discussions taking place to try and route it through to revelent people in an organisation.  Other good examples of using Twitter for customer service can be found in this blog posting from last year.

The real key with all these approaches is recognising the need to go where customers are having conversations and not expect them always to come  to your own site.  By being more open and interacting where people are spending time increases the chance to offer value to customers and offer a more immediate and responsive customer experience.

The amount of content being generated is increasing substantially due to the growth in user generated content (UGC).   This could be anything from text based content such as from blogs, forums, comments, wikis, microblogging (ie Twitter) through to media files such as images, video and audio.  This type of content is being generated by both employees and customers and is a valuable asset that companies need to manage in addition to their traditional content often generated through marketing or editorial staff.  This content explosion is also magnified by the deployment of new web sites launched to address emerging markets, lines of business or user demographics.

The reality in many organisations today is that there ends up being an increasing number of silo-ed content repositories, either using ECM packages or self developed internally.  The challenges are then around how to search across this content, reuse content across different assets, manage the content in a consistent manner and enable it to be accessed and displayed through different channels and technologies.

There have been some attempts already to try and provide consistent access to content.  One example is the Content Repository API for Java (JCR) which has had some adoption.  Of course while the Java standards are good they do restrict the adoption of the standards to those solutions based on the Java platform.

A much more promising solution lies in an emerging open standard for content access driven by OASIS.  It is the Content Management Interoperability Services (CMIS) standard.  It effectively does for content what SQL did for data by providing a standard interface.  All the major ECM vendors are participating in this standard including Microsoft, IBM, Oracle, SAP, Sun and Vignette.   Standards of course live or die by their adoption so it is important to have such large players on board already with this new standard.  Open source solutions often lead the charge and help progress standards and Alfresco is leading the charge with CMIS.   The standard is currently at v0.5 and being a new standard is embracing current web service standards such as REST and JSON.

In addition to having the content repositories supporting the CMIS standard it is going to be equally important to have front end client support to facilitate easy access and rendering of content from backend CMIS compliant repositories.  Encouragingly there is already some activity in this area with several client connectors being developed.   Many of these are listed on the Alfresco wiki and include DrupalJoomla and Flex/Air clients.  These are not Alfresco specific but as Alfresco has progressed faster than others in supporting CMIS for their repository the CMIS clients developed have been tested against it.

So CMIS is an enabling standard to support the concept of content as a service.  As it matures and becomes widespread it will increase in adoption and help enable solutions that leverage content as a service.  These solutions could provide dashboards and management tools to help manage content across many repositories as well as tools to help monetize the access to the content.  One good example of the potential for content as a service is that of the Guardian who have opened up access to their content (including monetizing it) with their open platform.

The open cloud

There are couple of different areas that people are typically looking for when they investigate cloud computing for their business, namely:

  1. Flexible infrastructure that will scale dynamically as needed with pricing that scales accordingly.   They can then deploy existing or new applications/services onto this infrastructure.
  2. Applications/services available on the cloud that they can start using straight away with minimal change while scaling the number of users dynamically as needed – sometimes known as SaaS.

Right now the second option is limited in terms of the number and type of solutions available, with a few established players such as Salesforce.com getting most attention.  There are of course a number of niche SaaS solutions available but these tend to be quite closed in nature and don’t really offer any kind of platform for growth.  Hopefully this will change over time providing greater choice to customers with more vendors and services available including open source options.

The first option of using cloud computing infrastructure is growing in popularity as it provides a more cost effective and scalable solution for deploying new applications whilst not constraining enterprises from having to pick from the somewhat limited selection of SaaS solutions available in the market.

The large established solutions in the cloud infrastructure solution space include Amazon EC2, Google AppEngine and Microsoft Azure.  However there is much more choice becoming available with a number of interesting open source solutions emerging.

Slight digression but does anyone care if the infrastructure is open source or not ?  Well you should care as having people share the code underpinning these technologies will allow a greater number of solutions to be developed with faster evolution and improvement of the technology which is better for everyone.   Good analogy is to think of science where information and discoveries are freely shared allowing for further and faster progress and advancement in many areas – open source brings that free sharing and progress philosophy to software.

So here are some of the open source initiatives worth looking at in the cloud computing infrastructure space.  Not only are they interesting of themselves but some of them like Hadoop are building blocks that can and are being used in assembling other initiatives and solutions.

  • Open source cloud computing platforms
    • Joyent – uses OpenSolaris and OpenSocial
    • Eucalyptus – education driven project supporting Amazon’s EC2 interface
    • Reservoir – European initiative with backing from IBM
    • Enomaly – uses RedHat’s libvert for virtualisation
  • Open source massively parallel distributed database technology
  • Open source cloud computing components
    • Reductivelabs – provides cloud infrastructure tools Puppet and Facter
    • Hadoop – Apache highly scalable distributed filesystem used by HBase and other projects
    • OpenNebula – virtual machine management, used in Reservoir project

Learn->Share->Improve – collectively we can build and assemble the open cloud computing platform giving everyone more choice at lower cost.

Eventually you realise that email just doesn’t cut it when it comes to collaborating, especially when working with a team of people even for a short period of time on only a small number of documents.  What you really need is a team collaboration space.

A team collaboration tool should offer some or all of the following :-

  • Web based project space for each project
  • Ability to invite people to join the project space (this could be both colleagues and external clients/partners)
  • Sharing of documents – should offer transparent version control, check-in/check-out
  • Wiki pages to share information (ie meeting notes, reference information, project objectives, status reports etc)
  • Forums/blogs for sharing information within the team
  • Calendar capability to specify events related to the team
  • Ticketing system for assigning ownership and tracking of tasks/actions
  • Full text search across all content or particular types of content
  • Integration to instant messaging tools to have team chat conversations recorded in project space
  • If used for technical projects could also include integrated source code control and build automation tools
  • Integration to other services such as Yammer (think closed Twitter for internal company use).  Yammer group updates could be shown in project space

Alot of these tools exist and such shared project spaces is really about assembling these tools together and enabling rapid configuration of new spaces as needed.

Providing these kind of tools can make a big impact on productivity.  It reduces problems related to what is the latest version of a document, or islands of information locked in people’s local machines or inboxes.  This issue becomes most apparent when someone new joins a project and you then have to try and forward all related emails or documents, with a project space everything would be available in one single place with a full history of progress.

Some solutions in this space are as follows :-

  • Basecamp – SaaS service with subscription model, free version available with some limits which is worth trying to seeing if offers what you need
  • OForge – open source assembled solution includes wiki, ticketing, svn, build tool integration
  • Alfresco Share – open source solution with strong document management core, search, blogs/forums, wiki’s, calendar

Additional useful tools include web conferencing with desktop share/whiteboards/chat/video such as Adobe ConnectNow (free for up to 3 people) and DimDim (free for up to 20 people).

Adopting tools such as this can sometimes be the hardest part – the only way is to trial it for one project and gain familiarity with some key features such as document management and wiki’s and then use it more and more as confidence and experience grows.  Experience shows that once people get used to the benefits they get from having all the information they need in one place they never want to return to the days of chasing others for documents and meeting notes.