31: Listener Question from Jessica - "What exactly is a full-stack developer anyway?"
Published 3/30/2015
In today's episode, listener Jessica asks what a full stack developer is.
Transcript (Generated by OpenAI Whisper)
Hey everyone and welcome to Developer Tea. My name is Jonathan Cottrell, I'm your host, and today I'm taking on a question from a listener named Jessica. Jessica's question references the Thoughts on Unicorns episode, which you might want to go back and listen to if you haven't yet, in order to get a full understanding of what we're going to be discussing in the answer portion of this episode. But first, let's listen to Jessica's question. Hi Jonathan, I have a question for you. In your Thoughts on Unicorns episode, you talked about full-stack developers being able to solve whole problems instead of just specific tasks. This is a skill I really admire and would like to cultivate in the context of web development. The listener you were responding to was thinking about taking a full-stack development course, but that's not really on my roadmap. So my question for you is, what sorts of projects and tools should I devote my time to, and what does it actually mean when you say full-stack developer? Thank you. So here's what I love about this question from Jessica. She knows that she is not getting ready to go and take a course on full-stack development, and yet she is still wanting to practice these ideas in her day-to-day life. I encourage you to do the same. If you are not pursuing your degree, that doesn't mean that the things that people learn to do while they are pursuing their degree aren't applicable to you. If you aren't currently a full-stack developer, that doesn't mean that the things that are applicable... to full-stack developers are totally not applicable to you. In fact, we learn the most when we start looking at what other people are learning. We start looking at what other situations might would require of us to do. There are tons of things that we can learn from people in other fields, for example. So I really appreciate Jessica's perspective and her drive to learn how to implement these kinds of things, even when she's not getting ready to go and take a course. So let's answer Jessica's questions. First, she says, What tools and projects should I be devoting my time to in order to learn this problem-solving approach rather than just task completion? And I'm going to start with practical answers first. The best project that you can begin to implement this on is the project that you can do starting today, and the ones that are new that you have some control over. So you can start with a project that you have some control over, or some input on more than it just needing to be done and you being fed tasks in order to accomplish them. Anything that you have a little bit more control over, whether that's a side project or one at work, maybe you have the opportunity and the authority in your given job to approach things from a little bit higher level that it would take to be able to do this, to practice the skill of problem-solving rather than task completion. I think a lot of developers are not willing to take the time to do this. I think a lot of developers are in a situation right now where they don't have the opportunities necessary in order to practice this skill because they are being fed tasks. So if you are in charge of your developers, give them the opportunity to practice this skill. Please, as a manager, please give them the opportunity to practice the skill of problem-solving rather than just feeding them tasks to do. I promise you the benefits of this. At the same time, you may want toijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijijij a new project just for the sake of this conversation or just for the sake of practicing problem solving, take a real project that you already have in front of you. Now, if you don't have a real project in front of you and you're trying to generate ideas, then go back and listen to the episode about idea generation. In that episode, hopefully we'll give you some inspiration for creating new ideas, for generating new ideas, even when you don't feel inspired or even when you don't feel like you have ideas in your brain already that just need to come out. So the best projects are the ones that are in front of you that you have the authority to take a step up from task completion to problem solving. And that sets the stage for the second part of Jessica's question, which is, what exactly is a full stack developer? Well, let's identify first what those different things mean, each individually full stack and developer. Let's start with stack. What is a stack? Well, in traditional computing, stack is something different than what we're going to talk about today. So we're going to discard that explanation, but it kind of informs the understanding of what we're doing here, which is a stack is all of the details from the most, the highest resolution, think interface and copywriting and design, all the way down to the lowest resolution, think bits and bytes, zeros and ones. And so when you look at a technology stack, you're talking about everything between the very raw fundamental pieces of the computer, all the way up to the abstract psychological pieces of the person interacting with that computer and everything in between. That's a stack. And so a full stack would be all of those details, specifically all of the details that have been implemented by a given application. So for example, a Rails full stack developer who does web applications, they probably don't consider themselves experts in assembly code because that's not part of the stack. They have kind of a subsection of the full stack that we discussed earlier. So a full stack for most conversations is everything from a abstract programming language, the bottom level most likely being C, sometimes being like assembly language, all the way up to the design, the aesthetic elements, as well as the interaction, user experience, and branding elements of design, the aesthetic side. So how do you become a full stack developer? Well, you have to have competencies in each of those critical areas of the stack. And competency means that if a problem were to come across your desk, you use the 80-20 rule that 80% of the time you can solve the problems and 20% of the time, basically, you know who to send that problem to. That, I believe, is a relative good competency for full stack developers. Now, I will say also that you don't need the same level of skill. You need the same level of skill in each and every area. Quite often, full stack developers are much more skilled in the higher end of the stack. They're more skilled in interface development and in user experience understanding. Part of the reason for this is because most of the value in modern web applications, for example, is in the user experience, not necessarily in the back end. There's a lot of the back end that is kind of repeatable. It's outsourceable. But the unique aspects of a given application quite often are in the higher level pieces of the stack. They're in the user experience and the aesthetic appeal and the brand and all of those pieces. And those are things that are subjective and they're harder to teach. They're harder to get right. They're harder to make decisions about and to reason about because one given developer may have one way of doing things that completely differs from another. And so finding a good full stack developer quite often means finding somebody who is most often right about those subjective pieces. So full stack doesn't just apply to web. As you can see here, it applies to everything between a human and a computer, whether that is a smartwatch or a connected TV or your network. Your Nest thermostat or your laptop. All of those things require some sort of interaction with a computer by a human and then underlying technology. And that stack is defined by all of the pieces in between the human and whatever the computer does in response to the human. So I hope this answered your question, Jessica. Focus on projects that are right in front of you. First of all, focus on the ones that you have available to you, especially if you have control over those projects. And secondarily, spend some time getting familiar with the stack that those projects are built on top of. Spend some time getting familiar with the people who are using it. That's another part of the stack that I think we often forget is the human on the top of that stack. The human who is actually interacting with the computer. Because the rest of that stack, ultimately, is useless without the human. So spend some time getting to know the stack, getting to know the people who will be using whatever it is that you are creating. And I think that is a good direction, especially if you aren't going to be learning in an academic environment. And there's a million different resources on the web for learning these different pieces of the stack. You have to know what that stack is first. And then some good guidance. And Googling will get you a long ways. Once, Jessica, you directly, once you have figured out what that stack is, please email me and I will share every resource that I can with you. And hopefully that will help you out. If you have a question for me that you would like to be answered on the show, please contact me on Twitter at at developer T or through email at developer T at gmail.com. And if you send me your question, I will be happy to answer it. I will almost invariably, I will get back to you in email. I would love to have these questions in audio like what Jessica provided. I actually asked Jessica to send in her question via audio and she was nice enough to do so. If you would do so as well, I would love to feature questions from all of you on this show because people love to hear your beautiful voices. They loved hearing voices other than mine sometimes on developer T. So thank you. Thank you so much for listening. Please reach out if you have questions at developer T on Twitter, developer T at gmail.com. Of course, show notes can be found at developer T.com. And until next time, enjoy your tea.