My involvement in backend development (mostly but not always web) spans over several years in different companies. My experience ranges from fully redundant, fault tolerant systems for public facilities and infrastructures providers to web sites with page views in the order of millions of unique visitors a day.
Most of my recent experience relates to providing remote (usually mobile) applications with the same sort of services offered in a different way (usually a web site) by implementing some sort of API. The particulars of implementing an API subsystem (stateful vs. stateless, session management, authentication and security, throttling, performance) are unique and complex, usually underestimated and potentially expensive to fix. In addition, the consumer side (as opposed to the producer), when implemented in the server-side is also particularly worth mentioning as requiring some experience to get it right.
In my experience, backend software development presents a series of constraints that requires some experience to master, including
It is headless software, in the sense it does not present an UI – even though the backend software is usually in charge of providing services to some sort of front-end which implements it. It thus requires careful architecture and design, usually paying attention to the interfaces and contracts between the subsystems involved, to not require or at least to diminish the amount of maintenance it is subject to
It is usually meant to scale up to several machine, potentially in different sites in an as linear as possible fashion. Communication between processes and machines is usually heavy and subject to contracts (potentially carved in stone) and the data throughput is usually also high.
As mentioned before, given the scale of the software in terms of complexity and size, a careful and thoughtful requirements, design and architecture phase is mandatory. Making mistakes or under estimations could prove extremely expensive to fix during the development stages – even impossible without changing some cornerstone of the software.
Involves several loosely related disciplines, ranging from network administration to database design, including a variety of web technologies. In addition to that, and specifically web backend development evolves at a blazing speed, with each new year bringing new tools and techniques that render previous one obsolete in a matter of months. Having some experience with system administration is also necessary.
Usually being exposed into the wild, backend services should be designed with security in mind from the first draft. Carefully testing, auditing and monitoring must be integral part of every project.
Below are the development environments I have developed backend software with
- LAMP + NoSQL
- Comercial UNIXes: HP-UX, IBM AIX, Sun Solaris, SCO UnixWare
- Windows NT / IIS (NT Services)