How To Be A Full Stack Developer In 2022

preview_player
Показать описание
What is a “full stack developer”? Full stack developer has become a common way for people to describe themselves, but what does it really mean, and does it matter? The simplistic view is that it means that you write front-end code and back-end code, but it's all really just code, and doubly so if you are writing front and back with the same tech. So that doesn’t really mean very much. That would be fine though if there weren’t some underlying kudos associated with the idea. It seems to be assumed that full stack development is better than other development. That these people are more rounded and more useful as team members. So what does it take for that reading to be true? What do you need to be a full stack developer in the sense of a more rounded, more valuable member of the team?

In this episode, Dave Farley author of “Continuous Delivery” and “Modern Software Engineering” talks about what makes us more rounded as developers, and more “full stack”, and what he thinks really defines the idea if it is not technology alone.

_____________________________________________________

🚨 MY TDD COURSE IS AVAILABLE NOW! 🚨

Learn to write great tests, and how to use those tests to improve the design of your software: with step-by-step guidance and demos by Dave Farley, and practical exercises for you to learn TDD and BDD. Available to start now!

_____________________________________________________

📚 BOOKS:

In this book, Dave brings together his ideas and proven techniques to describe a durable, coherent and foundational approach to effective software development, for programmers, managers and technical leads, at all levels of experience.

📖 "Continuous Delivery Pipelines" by Dave Farley

NOTE: If you click on one of the Amazon Affiliate links and buy the book, Continuous Delivery Ltd. will get a small fee for the recommendation with NO increase in cost to you.

-------------------------------------------------------------------------------------

📧 JOIN CD MAIL LIST 📧

-------------------------------------------------------------------------------------

CHANNEL SPONSORS:

Рекомендации по теме
Комментарии
Автор

🚨 MY TDD COURSE IS AVAILABLE NOW! 🚨 ENROL HERE 👉 bit.ly/3JB5smY

Learn to write great tests, and how to use those tests to improve the design of your software: with step-by-step guidance and demos by Dave Farley, and practical exercises for you to learn TDD and BDD. Available to start now!

ContinuousDelivery
Автор

Great video. To me a fullstack engineer is anyone who isn't afraid to get involved at any level and is comfortable learning and applying a wide range of new things. Some people just like to focus on a specific area, while others like to be involved in everything.

VideoWow
Автор

Dave, I have watched, and benefited from, so many of your videos. By using your advice, I've cultivated a sense of peace and competence with my work. That feeling has been instrumental in getting me working again after a over-a-year-long depressive slump. I love you Dave. Thank you.

jimraynor
Автор

I think you nailed it in the end: The distinction is more between a good and mature developer and someone who's not there yet. It's not about full stack or not full stack (partial stack?) at all. Even if I'm not a full stack developer, I'd expect myself to be able to tell the implications of my choices on the whole system and the final user experience. If a backend developer implements an API that can only return a single item by an ID, and a frontend developer implements a loop to get hundreds of items, each in a single request, are they really doing a good job?

elfnecromancer
Автор

Long ago, when I started, year 2000, everybody was a full-stack developer, the team was responsible for the whole SDLC and also to support it in production, today, we have come full circle ...

RicardoSilvaTripcall
Автор

I am a swiss knife, the master of none. I am Fullstack. My job is pretty simple to narrow down: it may start with design or directly translating one into a web page (UI), create or transform ideas into functionalities (UX), create data structure (database), handling the data (CRUD), server configurations, last but not least Understanding what is out of scope in a project. There is a difference between knowing a bit of everything and actually doing a bit of everything. Not everyone is fullstack, we all have our strength but mine will never match those of a specialist. Nowadays ppl use Wordpress slap a theme on it configure plugins and call themself fullstack, to each his own I guess. If you are a main dev you are full stack. If you are part of a team of fullstack to me it is like speaking 10 languages but only using one 99% of the time.

DAG_r
Автор

I think we could also take this problem by the other end : what would be the title of a web developer that can create an hybrid app / web app, build the database schema, write the server side code, add CD/CI for each parts, help with debugging network etc... depending on the needs of the team / company at the moment <T> ?

Not everyone has the time / wants / has the mindset to be such a "web generalist developer", with the ability to switch context on a daily basis without losing track of any part of the work.
To differentiate a software developer that just sticks to back end and db, one that does back + front, and one who can do way more than that (be it devops, blockchain stuff, game dev, firmware dev, AI, graphics, ...) ... what would be the appropriate term(s)?
Because "software engineer" could fit all of those developers which means we may want to use a more specific word.

Grouiiiiik
Автор

as a full stack developer with 5 years of experience, I started with small e-commerce websites until the real-monitoring system for radars.

we are very useful for a prototype or proof of concept for an idea but it depends, on how much the person is willing to learn the scope of the problem, what kind of skills you are masting because we have a time constrain.

so what happened on a large scale, I'm not a full-stack developer, I'm a backend developer because there is no time to focus on problems on both sides.

to be honest, no one will pay you more salary than usual but you are at the same time doing a job based on 2 roles, so buy your time and focus on something.

NOTE:
it is also a good start for any developers who practice it, by the time you will feel that you are able to build any system and learn any kind of skills you want in a short time besides focusing on the big picture, knowing the problems about (backend and frontend) will really help you to improve your communication skills and make good decisions, focus on abstraction more than tools, and you will become a good problem solver.

hazemhatem
Автор

I like your breakdown of this. It speaks of a kind of wisdom that is so often lacking in technical circles.

JohannY
Автор

I think full stack means you can develop an application (cli or GUI) from start to finish, CI/CD and the devOps behind it INCLUDED as well as setting ur DB instance and an API if needs be. Basically you're a one stop shop problem solver

tallawahh
Автор

Love this video! I've had a similar view on "fullstack" for a long time but very few seem to be able to step out of the stereotypical "fullstack" image.

gullijons
Автор

Build your apps. Write apis in PHP connect to a frontend with jQuery and you are done. Full stack dev simplified ;).Have been selling this for 15 years. In 2022 it works as well as it did in 2010.

swojnowski
Автор

Good video Dave. I argue that the term end-to-end-testing has the same problem - 'where does it start and when does it end?'.
In other words, there are certain industry terms either need to be avoided or need a clear definition.
IMO, if one or more of these terms are used in a job posting, you need to clearly establish the definition in the role's interview process.

queenstownswords
Автор

I'm waiting for Dave's new content like I'm waiting for the hot bread in the oven.

PaulSebastianM
Автор

As someone who calls himself (rightfully or not) a fullstack developer, I define it as: "A fullstack developer is able to do everything required to create and deploy an application, from a blank requirement sheet to the final product on the user's screen."
A fullstack developer is a developer, engineer, devop and business analyst in one person.

That means a fullstack developer needs to not just know how to access a database, but also how to install it, create database schemes, indices and such. Whether it's SQL, NoSQL, MS Access or whatever. It doesn't need to be as detailed as a specialist and not all technologies have to be known, but it needs to be a good enough foundation that he can do all of it on his own and understands each step of the process.

He or she doesn't just need to know how to output things through an API, he also needs to know about creating and designing user interfaces, UX best-practices, image encoding and such. It doesn't need to be a pretty UI, but it needs to be usable enough that someone who can do pretty UIs just needs to style it without having to move things around too much. For web applications, that includes knowing Javascript and Websockets to make the UI interactive.

The fullstack developer doesn't just need to know how to write and build a program, he also needs to know about how to deploy a program. That includes version control, virtualization, containerization, operating systems and such. Whether it's setting up a docker environment, starting up a tomcat for a Java web application, installing XAMPP or creating a setup.exe for a windows application, the fullstack developer needs to be able to set up the production environment and pipeline on his own. That includes setting up things like Gitlab, Bitbucket or any alternatives.

For fullstack, you need to know networking, whether it's classic TCP/IP or higher level HTTP, you need to know operating systems to analyze issues, you need to know the tools to delve deep into logfiles, whether they are from the OS, crash dumps from the application or IDS security logs. You need to know about security within the scope of your application, whether it's XSS or SQL injection for web applications, DDoS or timing attacks for networked applications or memory vulnerabilities for local applications.

Of course not all of it needs to be as in-depth as a specialist and you don't need to know all technologies for all parts, but you need to know enough for every part that you can quickly build upon that knowledge to gain familiarity with new, related technologies and practices. For example, you don't need to know the details of MySQL, Postgres, SQL Server, SQLite and all the other SQL-based DB systems, but you need to know one or two of those enough that you can learn others quickly.

If there is any part of your project that you can't or won't do on your own, you are not a fullstack developer. You might have your preferences and avoid doing some things (e.g. I don't like doing UI stuff), but you must be able to do all of it if the rest of your team or company got hit by a bus on the same day.

SCMorfildur
Автор

Thanks for your videos! I've been watching a lot of them and they're really helpful! My boss is still not convinced and it comes down to one question you don't seem to have covered, yet: How do we get paid?

With an agile approach, how do I determine beforehand how much our software will cost? My answer would be that we shouldn't have to. Our customer should pay new development by the hour. Meetings included. My boss seems to think that we wouldn't have any customers if we cannot put a price tag on the software for the management to approve of the spending. Again, my answer would be that we can put a price tag on EXISTING software, making an informed guess how much time we need for configuration, but let them pay NEW development by the hour. I can't see why this shouldn't be possible.

How do you determine prices for software projects?

kathringluck
Автор

"Full stack developer" was invented by a recruitment agent at the behest of an employer who didnt want to pay more than one person to build their website and wanted someone to be able to work on the full stack that enabled website back in the day; html, js, php, sql etc. Variety is the spice of life so individuals should be able to define whatever they want to be; "full stack" or js developer.. the point is that we are playing a game that recruitment agents have defined not us. Like "technical managers" :D

iktrain
Автор

Watching this video and it made me think of my job and the problems me and my team face. How do you tackle Deep systems?


I am an embedded software developer in the automotive industry. And more specifically I'm involved in the development of Instrument Panel Clusters. For these type of systems you must design and develop software that deals with high-level graphics and low-level drivers alike. My first question is: How do you form Agile teams?

An Agile (Scrum, really) team (as far as I understand) is a smallish team of 6-9 people, who has all the skills necessary for implementing a set of features in a system. But what if the system is too deep? Imagine a simple function: press a button and show an image; in an embedded system this "simple" function would require to capture the signal through the I/O ports of the MCU (you need to develop a low-level driver); decode the signal (develop the hardware abstraction layer); send the signal, which is now a request, to the corresponding piece of SW (develop services to enqueue, store or trigger events for external requests); identify the request and map it to the corresponding image (develop the application layer); trigger the Graphic services to show the image (this is a whole other job where you need to develop the drivers, abstraction and services for the video RAM, storage like file-system, the display, rendering of images, etc.).

The obvious answer is to create separate teams for the platform's stacks (the low level stuff) and the application layer (that which uses the platform's services). But now you have separated the functionality and created a dependency between teams. Now you cannot have independent teams that can implement functionality by themselves.

Now the idea of Sprints... each sprint you will implement a part of the software and ship it. It's like creating a cake slice by slice. But what if the cake is 10 feet tall? Embedded systems are deep systems because you are dealing with many layers of code.

What will the first User Story look like? When you're starting all you have is a blank Microcontroller. The first User Story musn't involve the user at all because you're still developing the Platform and the User doesn't deal with the Platform!

How do you tackle User Stories when each user story takes 10, 000 lines of code and 2 months to implement? (any functionality from the user POV involves many other functions inside the system) Imagine you're creating a desktop program, but every time you want to draw something on the screen you have to create or tweak and configure (and debug!) the Windows/OS's graphic drivers and services. And maybe the motherboard gives you some problems too because all of the Hardware is being developed and refined at the same time.

I think the Agile movement has left behind the embedded systems, the deep systems. Are there any recommendations? I which more guru developers would talk about embedded. Developer has become a synonym with Web Developer, remember there are other areas of development as well.

Off the top of my head here are some layers in our architecture: Low-level Drivers (e.g. memory driver, communication driver, I/O drivers, MCU drivers), Hardware Abstraction (Non-Volatile memory emulation, communication protocols like CAN, LIN, SPI, I2C; cryptographic interfaces), Services (system states, diagnostics, communication services, etc.), Application Logic (the actual functionality); I'm just naming parts of the AUTOSAR architecture, and this is not counting that in Instrument Panel Clusters you also have to deal with the Graphics part (one of the few ECUs in a car that have User Experience worries).

manuelgurrola
Автор

Brilliant Dave and love the Beatles analogy. Having played in bands and worked in development trams I can confirm the creative dynamic is incredibly close.

Hey everyone, what do you think is the coding equivalent of a jam session?

RichieMackay
Автор

I love The Beatles analogy, but I think there are more nuances than just the members of the band. They were influenced by rock and blues musicians that came before them. I feel like this is how we learn from those who came before us including Dijkstra, Knuth, Fowler, you and others. The Beatles also didn't build their own instruments, but they chose them. I feel this is like us choosing our programming languages and frameworks. Finally, The Beatles had recording technicians making sure that the recording technology was working. While the band was definitely involved in the final mixing, they still depended upon the technical experts. I'm not sure the software equivalent for this, but maybe it's QA or Ops.

jimhumelsine