Concepts
| Concept |
References |
Front-end Development
|
The process of creating HTML, CSS and JavaScript to work on the client side for the user to interact with it. It can result in a Website or a Web Application.
Front-end Developer Handbook
|
Back-end Development
|
The process of creating the server side or APIs to serve a Website or Web Application. It can be composed of a web server, an application, and a database. The back-end is the code responsible for communicating with databases and moving data to and from the client-side.
A Beginner’s Guide to Back-End Development
|
| Full Stack |
The ability to work on front-end and back-end technologies. |
| Software Framework |
It is a basic structure that provides some definitions and resources serving as a foundation for building faster applications using a certain programming language. Normally frameworks implement for example easy ways to use certain patterns such as MVC (Model-View-Controller), MVP (Model-View-Presenter), MVVM (Model-View-ViewModel) |
| UI Libraries |
Library of visual components to make it faster to create visual interfaces, such as Bootstrap, Foundation, Bulma, Tailwind, Material UI, UI Kit, Materialize, Element. Normally this Libraries have variations for easily adapt to each framework. |
| Development Platform |
Platform to which the application will be developed to run on: Web, Android, iOS, Windows, Linux, IoT Devices |
| Platform |
Book Platform Ecosystems (by Amrit Tiwana) defines a platform as the extensible codebase of a software-based system that provides core functionality shared by apps that interoperate with it, and the interfaces through which they interoperate. |
Common Stacks
Since 1998, when Michael Kunze created the LAMP stack, the concept of technology stack (also called simply “Tech Stack”) evolved a lot and cannot be represented anymore in complex products only by acronyms.
The best reference today to look into stacks been used by companies and professionals is Stackshare. for example have a look into my Tech Stacks.
But it is interesting to know which stacks acronyms were created until today and what they mean:
| Stack |
Components |
LAMP (1998)
|
Linux, Apache, MySQL, PHP
Linux (operating system)
Apache (webserver)
MySQL (relational database management)
PHP (programming language for front-end and back-end)
|
LYME (2005)
|
Linux, Yaws, Mnesia, Erlang
Linux (operating system)
Yaws (webserver)
Mnesia (database)
Erlang (functional programming language)
|
LYCE
|
Linux, Yaws, Mnesia, Erlang
Linux (operating system)
Yaws (webserver)
CouchDB (database)
Erlang (functional programming language)
|
MEAN (2013)
|
MongoDB, ExpressJS, AngularJS, NodeJS
MongoDB (document database)
Express.js (a back-end web application framework)
Angular.js (a front-end web application framework)
Node.js (a JavaScript runtime environment)
|
MEEN
|
MongoDB, ExpressJS, EmberJS, NodeJS
MongoDB (document database)
Express.js (a back-end web application framework)
Ember.js (a front-end web application framework)
Node.js (a JavaScript runtime environment)
|
MERN
|
MongoDB, ExpressJS, React, NodeJS
MongoDB (document database)
Express.js (a back-end web application framework)
React (a front-end web application framework)
Node.js (a JavaScript runtime environment)
|
JAM (2015)
|
Also known as JAMstack: Javascript, API, Markup
JavaScript (as the programming language)
API (as a way to request data from different sources)
Markup (as a formatting language)
|
Software Development
Making Choices
Avoid turning this process of choosing into a neverending journey. It is important to choose wisely, but taking too long will delay you from the beginning and start pushing things to production. Keep in mind that lots of products change their stack along the way as they learn what are exactly the product needs in terms of architecture and performance. Also, it is important to keep in mind how hard it is to hire people for each of the existing programming languages and frameworks.
Keep in mind when making a choice:
- How hard it is to hire someone with the technical knowledge?
- How much it is to hire for this technical knowledge?
- How much the technology is related to a company rather than a community? When a company is responsible for a programming language or framework they might take decisions that impact your product
Cases that we might not forget
- Remember Angular 2.0? - a new version launched by Google was completely different from the previous one. And yes I had products developed with Angular 1.
- Remember Flex (by Adobe)? - it depended on a browsers having the runtime and once Steve Jobs decided to remove the support from Apples browsers it started to collapse. And yes I had products developed with Flex.
Web Front-end
All the following programming languages in the end produces and manipulate HTML and CSS.
Mobile Front-end
Important to note that we have Native and Non-Native Programming Languages. Native programming languages usually have easier access to the mobile operating system libraries, but they only work in a specific operating system (iOS or Android).
| Programming Languages |
System |
|
| Swift |
iOS |
Apple’s iOS Native programming language |
| Objective-C |
iOS |
Apple’s old iOS Native programming language |
| Kotlin |
Android |
Android’s most recommended native programming language |
| Java |
Android |
Android’s common programming language |
| Javascript |
Any |
NativeScript (Angular and Vue), React Native (react-only), Ionic Framework (React, Angular, and Vue) |
| Dart |
Any |
Flutter - created by Google |
Back-end
Desktop
| Programming Languages |
Notes / Best used in… |
| Javascript |
Electron |
Scripting
| Programming Languages |
Notes / Best used in… |
| Shell Script |
|
| Javascript |
Node.js |
| PHP |
|
Data Science
| Programming Languages |
Notes / Best used in… |
| Python |
|
| R |
|
Architecture and Design
Software Architecture Guide (Martin Fowler’s blog) is a great starting point. Most of the topics here makes reference to this Guide.
Common Techniques
| Technique |
References |
Feature Toggles
|
Also known as Feature Flags, Toggles or Flags that turn on/off a feature. Normally used when a feature is still under development and cannot be released just yet. That enables the teams to keep pushing and sharing code without breaking deployments.
The Complete Guide to Feature Flags
The hub for feature flag driven development
|
| Targeted Rollout |
Also known as Phased Deployment or Progressive Delivery is a technique to rollout a new version to a small group of users first and grow from that until the new features reach all users. This enables the team to securely evaluate the impact and behavior of the new feature within a small group of users, and address any problem encountered (from bugs to problems related to workload when scaling the usage). The targeted group can be random or selected according to some characteristics (location for example). |
| Loosely coupled services |
Designing loosely coupled services by the author of Microservices Patterns (by Chris Richardson) |
References
Recommended Books
|
|
The Manager’s Path - by Camille Frontier
A Guide for Tech Leaders Navigating Growth and Change
|
Key takeaways
“One-on-one meetings with your manager are an essential feature of a good working relationship.”
“A manager’s job involves making it easy for her employees to get things done by creating fertile environments in which work can happen.”
“Mentoring new hires is critical.”
“Feedback works best when you, as a manager, pair that feedback with coaching.”
“It’s unrealistic to think you can or should shield your team from everything.”
|
|
|
|
|
Production-Ready Microservices - by Susan Fowler
Building Standardized Systems Across an Engineering Organization
|
|
|
|
|
Microservices Patterns - by Chris Richardson
|
|
|
|
|
Refactoring - by Martin Fowler
Improving the Design of Existing Code
|
|
|