It’s interesting to take a step back sometimes, and consider how the world of the application developer has changed over the last twenty years. Where an individual could once upon a time install a server and dive head-long into O’Reilly books with various animals on their covers, the story isn’t so straightforward anymore. Every corner of the software and web application development knowledge base has become its own country. The idea of the “full stack developer” has become more fable than aspiration.
Let’s take a look at the various roles involved in the design, development and delivery of a solution:
User researchers
Software applications are commonly based on the wants of the organisation, versus the needs of the user. In many cases this is fine – but as soon as the organisation becomes a public body, and the audience becomes you and I, public interest takes the lead and the work of the user researcher comes to the forefront.
A user researcher studies the needs, wants, and behaviour of users in order to both inform and improve the design of products and services. They use a variety of methods such as surveys, interviews, and usability testing to collect data, which is then used to inform the design of products and services.
Throughout the design and development of a typical solution, user researchers will repeatedly test content and design work with users from a variety of backgrounds to gather feedback and inform future direction.
Content and interaction designers
Software and web applications are far more than a sequence of interfaces, controls, buttons, and data. They communicate, request, and present information to and from users. Those users may come from all walks of life, have particular needs, or may struggle with any of a number of difficulties that might make an application more difficult to navigate.
Content and interaction design brings the wants and needs of users to the forefront – considering how information is presented – how easy it is to digest – how necessary it is – and how easily a variety of users with different use cases might interact with a proposed design.
Web designers
Everybody thinks they can design a good web interface — and they are invariably wrong. Design is a skill. A talent. Good design is based on a lifetime of observation, study, and the courage to stand ideas up and defend them. Of course, web interface design has all manner of constraints in terms of “what is possible”, and is perhaps the first example of a team playing to its strengths — where a designer imagines “what” without limiting their thinking by “how”.
Designers intuitively understand colour, white space, negative space, emotion, ergonomics, and pay more attention to the human experience than an engineer might. Suggestion, misdirection, and smoke and mirrors are common tools in the web designer’s bag.
Web developers
Turning a collection of graphical mockups or wireframes into a living, breathing interface requires an ever-increasing collection of skills.
Where web developers were once thought of as a somewhat lower class of software developer — working with scripting and markup rather than compiled or even interpreted code, the proliferation of Javascript frameworks such as REACT and Angular have changed the game. The modern web developer needs to know far more than HTML and CSS — they invariably need good Javascript skills, allied with Node.js, Typescript, Handlebars, or any of a number of other frameworks such as Ember, Django, or Ruby on Rails.
The problem of course is that frameworks suffer from being fashionable. In recent years REACT has been popular. A couple of years ago Angular swept all before it with Google’s “material design” components. Before that jQuery. Ruby on Rails is seeing something of a resurgence — returning from the back of the web developer’s closet like a pair of stonewashed jeans that were never thrown away.
Software developers
The “Cloud” is really an abstraction layer for a traditional software execution platform. Where companies once had rooms full of servers (many still do), economies have dictated that there is much to be saved by sharing hardware with anonymous others; hence the arrival of AWS, Azure, Digital Ocean, and countless others offering to share a fraction of their hardware with you.
Here’s the thing about “The Cloud” — you still need to design and develop the software that runs on it. You still need software developers. The popular development languages of the moment are Javascript (through Node.JS), C# (on Azure), Ruby on Rails (typically in Docker containers), Go, Python, and even Java still hangs on in a few corporate situations. COBOL is still out there in the wild, hiding in dark corners of banks and stock trading systems.
Software development didn’t die with the arrival of the internet — it just disappeared behind closed doors. Doors accessed via APIs — application programming interfaces.
Today’s developers need to know more than how to write the code — they also need to know their way around the API of perhaps several corporate leviathans; be that SalesForce, SharePoint, Hubspot, Azure, Office365, Slack, Dropbox, Google, or whatever else. Each platform is moving forwards at pace, introducing new features and deprecating old functionality.
Technology has come to the aid of developers in the shape of “DevOps” – the suite of automated tooling that assists with code storage, testing, compilation, deployment and support. In larger organisations the management of the code-base has become a somewhat specialised role in and of itself.
It’s more than any one developer can properly “know” any more. Sure, we can remind ourselves, we can crib from past projects and request the counsel of co-workers – but the days of “knowing” are gone.
Database designers and administrators
Databases are ubiquitous; holding the information we all store, read, browse, like, follow, subscribe to, and so on. Everything we see online is stored somewhere, and retrieved somehow. The people that invent those systems tend to see the world a little differently than you and I.
Where database developers once needed to know about SQL, indexes, joins, and perhaps some stored procedure syntax, they now need to know about mirroring, replication, backup, and the various features and functionality available in “the cloud”.
Adding to the confusion, “NoSQL” databases such as CouchDB and Cosmos have turned the skillset on its head — inviting users to throw “anything they have” at the database, and to let the system take care of it. It’s not quite “Star Trek”, but it’s getting there.
System administrators
System Administrators are the unsung heroes of the web development story. In the same way that Lunar Command Module pilots got the Apollo crews home in one piece, system admins look after the installation, configuration and smooth running of web servers, database servers, web services, and of course the operating systems they sit atop.
While applications serve an ocean of unknown users, administrators employ clustering, mirroring, scaling, backup, redundancy, and failover across the hardware and software that executes and delivers the fruits of the designers and developers work.
We haven’t even mentioned networking, security, authentication, and upgrades yet.
It’s tempting to think of administration as a deprecated skillset, given the proliferation of self-managing cloud services, with elastic scaling, co-location, and dynamic resource allocation. Who looks after the cloud though? The administrators never went away — they just stepped further behind the curtain.
Testers
If an application is going to be exposed to any number of users either inside or outside of an organisation, it is imperative that it is tested thoroughly – to meet user expectations, to minimise security vulnerabilities, and to ensure all users can make use of the service offered.
Functional testing ensures software meets the requirements of end users, and doesn’t break. It’s often performed in an exploratory manner – where the tester has no prior knowledge of the application or service design. Often functional testing is automated, and repeated during the development lifecycle – regression testing early functionality against later changes.
Penetration testing is used to simulate real-world attacks on computer systems and applications – helping to identify security vulnerabilities that may be exploited by attackers. Penetration testing software can be used to test a wide range of systems and applications, including web applications, operating systems, and networks – but exploratory testing is also employed – perhaps employing social engineering techniques to work around a technology solution.
Accessibility testing is the process of ensuring that solutions are accessible to people with disabilities. This includes people with visual impairments, hearing impairments, mobility impairments, and cognitive impairments. Accessibility testing can be performed manually or with the help of automated tools. Commonly user researchers will help to identify candidates to assist with accessibility testing.
Project Managers
While some might dismiss project managers as the pointy-haired bosses of comic strip folklore, in reality the role is perhaps the most important. While the creatives on an application development team design, build, test, and deploy, the project manager monitors contracts. requirements, schedules, costs, milestones, meetings, and more.
The project manager provides both an interface with customers, and a wall behind which designers, developers, and administrators can work without influence or distraction. As projects become larger, and interested parties grow more diverse – with conflicting wishes, requirements, and wants – the project manager becomes increasingly important.
Very few software applications make it from prototype to delivery without significant change, iteration, or evolution. Who manages the risk, the change management, and the forest of communication involved in such journeys? The project manager.