When one says the words “software developers”, it conjures up the vision of a nerd who spends his days in front of computer screen in some dimly lit corner of his parent’s basement or some inaccessible room in an office. While this stereotype does have some basis in reality, software developers are people who like to solve problems and do it by writing code. Developers, however, face a whole new set of problems that require more skills that are not related to code.
One challenge comes from a generation that expects more from their devices than their parent’s generation. For the first time in history, a generation of people (called “millenials”) is coming up with no exposure to text user interfaces. Those currently in high school were born when Microsoft decided to no longer boot to a command prompt, rather boot right into the graphical user interface. Apple had been doing that very thing for years already. Nowadays, the terminal window, whether it is a DOS prompt, Bash shell, or something of this nature is a periphery app buried in some utilities folder out of view, and is only used by a few technical persons. And even so, the fine-grained control offered by such text user interfaces is being replaced with graphical management consoles through web-based solutions. What was an awesome user experience of 15 years ago is expected in applications nowadays, and the ever-increasing demand for a better user experiences from users is forcing developers to address problems that cannot be solved by code alone – a problem that requires the developer to interact users to they can understand these demands and design a user experience that meets these demands.
Additionally, a basic set of technical skills is no longer optional for performing many day-to-day functions. Jobs assume that candidates will be able to understand and use basic applications to accomplish tasks on the job. But many of these millenials know more than just a few basic skills – they are practically technical experts capable of teaching their parents and grandparents how to set up and use technology. A generation ago, these tasks seemed to require someone with a Ph.D. in a technical field to accomplish and technical oriented individuals were revered as gurus. Nowadays these gurus of yesterday are seen as hindrance rather than an agent of progress, wanting to hold on to the way things used to be. The newer generation grows frustrated by this seeming lack of concern for the new ideas. A few within the newer generation may even apply their technical skills and role their own solutions. This is known as “shadow IT” which is subversive established IT organization as a whole and creates rifts that are difficult to mend.
Another phenomenon is the diversification of devices and proliferation of portability, which is eroding the power to prescribe hardware. There is a monumental shift towards “Bring Your Own Device” and mobility. Technology used to sit on a desktop, and most mobile professional used company-issued laptops to do their jobs. But now computers have become more pervasive and diversified with the emergence of media players, smartphones, phone-tablets, tablets, netbooks, ultrabooks, notebooks, desktops, and workstations on multiple platforms such as Windows XP, 7, 8, OS X, iOS, Android, and Windows Phone. And it’s not longer a single device for everything. Many use multiple devices to do their work. Even low-level workers who use stationary desktops may use smartphones or tablets to do some of their work, and want IT infrastructures to support these personal devices. This creates a whole new challenge for IT and developers alike, and IT organization can choose to outright reject BYOD and mobility or find some way to accommodate it while dealing with the security and supportability issues BYOD and mobile devices brings with it.
These changes have been disruptive to traditional patterns, and a whole new set of paradigms to address these new challenges is emerging. First, the commoditization of software has forced developers to change how they think about software. Rather than thinking of software as a product, developers are starting to think of software as a service. Software as a service characteristically is distributed via the Internet on demand and remotely managed. Business models require the user to either pays for a service or “rents” the software from the provider. SaaS implementations, though, are not necessarily UI oriented and can be API’s for developers to use to integrate data from a particular service into their applications, which as caused a shift in application architectural pattern too. In the past, applications were oriented around n-tier architecture, and the tiers were generally speaking particular to the applications running them. Service Oriented Architecture tries to design services that are not particular to applications, rather particular to the data they intend to provide. SOA also provides these services through as many channels as possible, such as REST/JSON and SOAP. In a way, SOA helps create a lowest common denominator for devices to connect to, provide a means for applications of different purposes to connect to the services, and helps make citizen developers instead of shadow IT out of those who can write software. Third, governance for the proliferation and diversification of devices has changed. For instance, one must decide what one is going to do with BYOD as one cannot simply ignore it. In any case, establishing governance sets guidelines and strategy for how one wants to handle the diversification of devices.
Because of these new challenges and shifting paradigms, software development is no long just about code – it’s more than that. In the past, when organizations hired employees for IT jobs, they would higher them based on a particular IT skill set to perform a particular task. .NET developers were hired to write .NET apps. Java developers were paid to write Java apps. There was little or no incentive learn new skill sets so long as there was a full project portfolio requiring the already existing skills. But the days of single platform deployments died when Windows hegemony ended, the market is more volatile and diversified, and there seems to be no end in sight. Project portfolios are being modified to account for these changes, and there is an increasing demand by the industry for developers to do thing they never had to do before including some things that have nothing to do with technical skills, essentially becoming a new breed of polymaths:
- Developers have to learn how to influence others. Influence is not about getting others to do things one’s own way, rather it is about facilitating others to buy into a common vision to accomplish a task or solve a problem. This requires relational capital that extends beyond the meeting room. Developers can no longer sit in their ivory towers (or cubes) and code 24/7. They have to be sociable rather than antisocial creatures to accomplish this. Rather than creating rifts between shadow IT and established IT, developers should learn how to transform shadow IT into citizen developers – those who can actually help assist the task of IT organizations.
- Developers have to understand business and IT holistically. Business units hardly ever operate in a vacuum, and IT solutions rarely ever affect a single business entity such that it requires a synoptic view of business rather than a view of one’s own microcosm. Being able to function in multiple business units effectively then is a required skill for developers. This will help identify who the citizen developers are and help build synergistic solutions that transcend business units that help improve the over all efficiency of an organization.
- Developers have to understand both the old and obtain new skills. Newer developers have to gain an appreciation for the way things used to be done. The way things used to be done was at one point in time state of the art, and the developers of that day were abreast of the current issues in development. Older developers have to have an appreciation for the new in order to adapt legacy systems to newer paradigms, rather trying to superimpose old paradigms on to new systems. Whether one is a new developer or an older developer, one constantly has to acquire new skills (new relative to one’s own skill set, that is) in order to be able to address the problems in a current market.
Without fail, developers have to break out of the stereotypes to adapt to the tidal shifts occurring all over the computing industry. As the industry ages and new paradigms emerge, the complexity of these problems increase, which entails more demands on those who develop software. The technical wizards of yesterday are the common people of today, so a new breed of developer is needed – the renaissance man, the Leonardo da Vinci who can master multiple seemingly unrelated skills to bridge the gaps between generations, people, and technologies to make it all work together efficiently and effectively.