10 Skills Developers Should Invest In for 2014
Every minute of the work day is an opportunity for investment for us as developers. During this time, we can make a conscious decision to grow in our craft or instead chose to stagnate. Sadly many developers make the decision to get comfortable with a set of skills and not push forward. Many organizations are filled with these developers.
There is an alternative to this. Many developers actively choose to invest their time in targeted efforts to mature in their craftsmanship and innovate their technical skill set. To the surprise of many tech bloggers out there, this process often includes growing in areas which are not tied to a specific language or platform.
Determining where to invest your time and energy for growth as a developer is the single most important thought process that you will undertake.
On a daily basis I talk with clients and interview developers in my role as a Principal Architect at Universal Mind. Based on my lens into the current digital climate, I have compiled a list of the ten key skills that innovative software craftsman should invest in for 2014.
1. Know a native mobile platform.
There are many ways to create mobile applications. From an HTML hybrid approach to an approach which renders native controls from another language. However, all of these have one thing in common: when running on the device, these applications are running on native code. If an organization is going to create and deploy a mobile application, they will need to utilize someone who understands the native layer, even if the application is built using another technique.
There are obviously a few good choices here. iOS, Android, and Windows Phone all provide rich platforms with vibrant development communities in which you can engage. Just this skill alone will greatly increase your value to your organization as well as your personal marketability as a developer.
2. Know a basic agile development process and toolset.
To be clear, I’m not saying every developer should be a project manager. I am saying that every developer needs to understand the process. They need to understand how to track progress on tasks and how to work with other developers to get things done. Even if you are a developer who usually works solo on projects, understanding agile development and an agile toolset can help you learn how to size your tasks as well as determine if you are on track for finishing your commitments.
There are many different flavors of agile development including Scrum, Kanban, Extreme Programming (XP), and many others. A part of this investment is doing a little bit of research to determine what method fits your current situation. Within my work at Universal Mind, I have found that many organizations have success starting with Scrum or Kanban and seeing where the process might need to be tweaked for them.
The available agile toolsets include varying degrees of complexity, and in many cases the choices are tied to the flavor of agile development that you will be adopting. It could be using a simple toolset like PivotalTracker or Trello, or it could be leveraging a sophisticated tool like JIRA Agile.
Some developers will read this and think “I shouldn’t be spending time learning this — this is someone else’s problem”. To give some context, I am writing this post sitting in the Atlanta airport on my way back from speaking with a Fortune 100 company about how they can innovate more rapidly on their customer-facing mobile projects. Agile development is a big part of that. Within their organization do you know which developers will have a role in shaping how this gets implemented? I’ll give you a hint, it’s not the guy who says “it is someone else’s problem”.
3. Know how to do effective estimations.
Few tasks tie all developers together like estimations. We all have to do them, and a good deal of our success is based not just on our work but also on the accuracy of these estimations. Younger developers tend to be optimistic in the estimation process while seasoned developers almost always skew on the pessimistic side.
While there is no silver bullet in how to do this effectively, the key is being able to learn from each project. There are effective team techniques that can be leveraged as well such as using story point estimation tied to team’s overall velocity. However, each developer still needs to learn how to estimate specific tasks for their own efforts within a larger project.
It is also important to remember that this ties hand in hand with your development process. If you are leveraging an agile process, you need to take full advantage of your toolset to let you know how accurate your estimates were. If you take the time after each sprint to do your own personal retrospective, you will notice your estimates becoming more accurate with each iteration.
I remember the day that I realized that irrespective of how awesome my code might be, I could still totally fail a project if my estimates were wildly inaccurate. If I want my organization or my client to appreciate what I bring to the table from a development perspective estimates have to be something that I continue to improve upon and make as accurate as possible.
4. Know JavaScript.
I would not have recommended this three years ago, but JavaScript is truly becoming universal. There is not any tier that JavaScript cannot touch to some extent. Currently you can utilize JavaScript to write mobile applications, server applications, program the data tier, create a blogging engine, develop and execute a custom workflow and pretty much anything else you can think of.
One of the big shifts that has been slowly happening is the ability to use JavaScript as a shared logic layer between native experiences. For example, recently in iOS 7 Apple included a true JavaScript bridge within the SDK. This means that it is possible to use JavaScript as a shared logic layer (for example between iOS and Android). As the ubiquity of web technologies grows, I expect that the ability to use JavaScript in this manner will grow to include most platform (included non-mobile ones).
I must make one important caveat here. JavaScript means different things to different people. I don’t mean ‘know jQuery’ or ‘know how to cut and paste from StackOverflow’. I mean really know the language. Read JavaScript: The Good Parts, understand prototypal inheritance, and learn how to think and program like a JavaScript developer. This will only benefit you in your endeavors.
5. Know a server side language.
This is a crucial element. If you are mainly a front-end developer, then you still need to have a cursory understanding of how things work on the back-end. Being able to create the entire chain from a front-end application through the API layer and to the database is an important skill set. Luckily in this case, there are a lot of choices. Java, .NET, Python, and PHP are all viable options (although there are wildly different levels of complexity with those options).
One advantage for developers is that if you already know JavaScript, NodeJS is a compelling option. It is amazingly easy to get up and running and do basic tasks such as setting up a basic web server, creating simple test services for a mobile application, and deploying applications to the cloud with services like Heroku and Nodejitsu. I use NodeJS heavily in our Research and Development efforts at Universal Mind, and we have used it for production with many of our clients’ applications. Many organizations like Paypal also have it as an emerging element of their architecture.
6. Know basic HTML and CSS.
Nothing is as ubiquitous in the developer landscape as web technologies. Most every platform has the ability to render web content and HTML has become a de facto way of abstracting layout concepts for many technologies. Even if you don’t do web development, having an understanding of HTML and CSS will only benefit you.
Another aspect of this relates to your public face as a developer. I think every developer should have a blog of some sort. This helps with overall personal marketability as well as cataloguing the things you are involve with. While many solutions exist for cataloguing ideas without having to leverage HTML directly, it is still beneficial to know.
7. Know how to quickly find information.
I want you to think about your average day. Think of the times that you needed to leave your tool of choice for writing code to go look up some information in your browser? How often does that happen each day? 5 Times? 100 Times? No matter the frequency, it happens several times every single day. Knowing how to quickly find the information that you need could greatly reduce the time you have to spend outside of your programming environment.
One of the characteristics I have continually noticed of great developers that have worked on my team is their ability to find quality information themselves. This sets them apart from average developers who need to be guided through a new process or platform.
Many tools exist to help lessen this time by providing quick access to common documentation or sites that you visit as a part of the development process. On Mac tools like Alfred and Dash can help lessen the overall effort to get the documentation you use on a daily basis. On Windows tools like Zeal provide similar functionality. Some of these solutions (such as Alfred) offer the ability to customize the workflows. As an example, one developer wrote a StackOverflow workflow for Alfred that allows you to quickly search StackOverflow based on keywords you pass in.
This year, if you don’t have one of the tools in your toolbox, adopt a single one and see how it can improve your search time.
8. Know how to maintain a project over time.
This can take many different forms. For example, you could put some of the software you have written out as an open-source project. Additionally, you could release an application in the iOS App Store, Google Play Store, Mac App Store, Windows Phone Marketplace, etc… In short, you need to know what it takes to put some software out there where you are the maintainer of the codebase and its roadmap.
One of the key benefits here is that you need to understand how your choices as a developer can directly affect the portability or extensibility of your code base in the future. As a developer or architect, you need to understand that your choices have consequences. There is no better way to learn that then managing your own code base over time.
9. Know Git well.
I realize that Git is more prevalent in some development communities over others, but Git is more than just a VCS (version control system). Because of its efficiencies in branching, it enables a very effective new flow that can be leveraged by both individuals and teams.
Vincent Driessen proposed a model of how branches could be used within Git, and this model is effectively known as ‘git-flow’. This approach is a fundamental shift that affects not only source code but process as well. I have personally seen this model work extremely well on projects with only a few developers to a few dozen developers. I even use this process on the projects that I am the sole developer, because I believe that practice is an essential element of learning any of these skills.
Atlassian provides documentation for the Git-Flow branching strategy on their site which is one of the best descriptions I have seen. In addition, Atlassian’s cross-platform Git and Mercurial tool, SourceTree, provides integrated support for Git-Flow.
If you are new to Git, learn it. If you are a novice, grow your skill set. Knowing Git well will only help you as a developer.
10. Know a good tool for tracking tasks and issues.
Tracking both tasks and issues for a project is an essential task that developers will encounter on a daily basis. While there are some quality tools that are free (such as Github Issues or the issue tracker in Bitbucket), in most cases developers will also leverage more sophisticated systems like JIRA in the development process. It is important to learn these tools just like any other tool in your arsenal.
Learn to use these tools in a way that benefits you and streamlines your workflow. Use them on your side-projects, and use them even when you think it might be overkill. Learn how to do things which save you time like linking and closing issues with your commit messages. In short, if you are going to use it — you need to be good at it.
Resist the temptation to believe that 100% of your responsibility lies in code. To become a well-rounded developer requires a skill set that spans technology, process, and toolsets. With the shifting digital landscape, developers who have invested in these areas will find themselves certainly in demand in 2014.