It’s easy for developers, especially full-stack developers, to feel like they’re out of their depths. As the job title indicates, full-stack devs are expected to work across the stack, which means having a working knowledge of many languages and frameworks. Devs are also expected to be good communicators who can speak code fluently with technical teams and translate such talk for their non-technical colleagues.
For those just starting their career or who want to sharpen their skills, there’s no shortage of advice for how to become a successful full-stack dev, which can be overwhelming and make it seem like there’s an endless list of things to learn. That’s why it’s helpful to maintain perspective.
“Engineering sometimes feels like this impenetrable unit of knowledge that was handed to some people and not others,” said Sam Dallas, a senior software engineer at Code Climate. “However, it’s just a skill like any other.”
That may sound like an oversimplification, but after hearing from Dallas and three other devs about the technical and soft skills full-stack devs need to be successful, it really does ring true. The engineers featured here offer a wealth of advice, and the root of how to act on it all is to simply have a desire to learn and grow and the patience to practice.
One of the skills a full-stack developer needs to be successful is the ability to pick up new languages and technologies. That’s fairly obvious given the role’s name, after all. What isn’t so obvious is that being a good communicator and team player is also critical for success, as working across the tech stack often means working with different teams and being the “bridge” between them, as Mikhail Martin, full-stack software engineer at Mulberry, puts it.
What technical skills do you consider to be the most essential for your success as a full-stack developer, and why?
Knowledge of testing and software design is essential for success as it is likely that you will be responsible for the entire lifecycle of a project. Knowing different types of tests and how to implement them reduces bugs, thus protecting your precious sleep from alerts in the middle of the night due to production bugs. It will also reduce the amount of pings and tickets from your client support team during the work day.
As a full-stack developer, it is likely that you will be tasked with starting new projects, too. Making good software design decisions early on will help minimize tech debt and save future developers — and yourself — from frustration. More time can be spent building exciting and value-adding new features instead of refactoring old, boring code.
You may have to learn the language and culture of each division in an engineering team and be the bridge between them.”
What’s a soft skill that you also consider critical for your success? Why is this skill so important?
Communication. As a full-stack developer, at least half of your time is spent in meetings with potentially non-technical team members and other business stakeholders. You will be responsible for translating technical solutions to non-technical people, which means using no technical jargon or explaining what the jargon means
Also, as a full-stack developer, you are expected to have knowledge across the engineering stack. You may have to learn the language and culture of each division in an engineering team and be the bridge between them. It doesn’t help that many development terms are overloaded and mean something different depending on where you are in the stack.
Finally, as a developer, especially in larger teams, it may be required to defend your design for an application. You must be able to clearly communicate why you made a decision and discuss its tradeoffs. Even if you have the best idea it can be rejected if it is not understood.
Throughout your career, what steps have you taken to strengthen these skills? And what advice do you have for developers looking to build up their full-stack repertoire?
First, I would recommend working on as many projects as possible and on projects where you have the least amount of technical knowledge. The learning curve will be steep but the experience will leave you with an abundance of knowledge. Next, I would recommend taking advantage of more seasoned developers. For example, code reviews with experienced developers can teach you new patterns. Also, take up any opportunities for peer-programming and don’t be afraid to step into the driver’s seat. Lead the session but collaborate with a more experienced developer to create a solution.
In addition, join workshops and classes. Knowing you are in a room with other people looking to learn can help relieve the pressure. There are many free meetups, courses and webinars online. Many employers offer an education stipend, so use it. My final piece of advice is to trust the process and be kind to yourself as you grow. Some concepts will take longer to grasp but there is no moment greater than when it all clicks and you go, “Aha!”
According to Jorge Silva, one of the most important soft skills a developer needs to master is the ability to ask good questions, both when asking for help and when working with other teams. For the Figma software engineer, developing this skill is key for career development, with Silva noting that senior engineers often spend more time solving complex communication problems rather than technical ones.
What technical skills do you consider to be the most essential for your success as a full-stack developer, and why?
As a full-stack engineer, it’s common to simultaneously be working with multiple systems for which we have limited knowledge. To be successful, engineers need to be able to dig into and understand these systems fairly quickly. This ability to familiarize ourselves with new systems is based on a mix of good debugging skills, wide technical knowledge and effective first-principles thinking.
When a full-stack engineer at Figma is assigned a bug, finding the root cause might involve digging through HTTP requests or web-socket messages in the browser, querying our database in Mode or analyzing the lifecycle of a React component. Every engineer at Figma is expected to have some familiarity with these things in order to be able to work independently.
All these things require both a base level understanding of how these technologies work but also the ability to introspect them and understand what’s going on. These skills are also just as important for feature work, where in order to add new functionality one must first understand how these systems work and the existing patterns used across the codebase.
Engineers who are willing and able to tackle slightly more complex projects each time and take learnings from them see compounding effects throughout their careers.”
What’s a soft skill that you also consider critical for your success? Why is this skill so important?
The ability to ask good questions. As engineers, we ask a lot of questions, both to others and to ourselves. In the process of debugging, for example, it can be tempting to go to a more experienced teammate and ask, “Why doesn’t this work!?” But this can be unproductive. It’s helpful to first take what we don’t understand and dig into the smallest, most atomic behavior that’s surprising. From that methodic investigation, one can arrive at a much more specific question to ask — and your teammates will definitely appreciate it!
At Figma, this skill is also important for interacting with other partners, from your manager to product managers, and designers. When assigned to work on a new feature, we’re expected to really engage with product requirements and designs, and the best way to do this is by asking thoughtful questions. An engineer might ask why we’re prioritizing a certain feature, how something would work under certain circumstances, or what’s the intention behind a decision. Asking good questions through this process is the best way to help each other and carry the work forward.
Throughout your career, what steps have you taken to strengthen these skills? And what advice do you have for developers looking to build up their full-stack repertoire?
I continually challenge myself by taking on ever more ambitious projects. Engineers who are willing and able to tackle slightly more complex projects each time and take learnings from them see compounding effects throughout their careers. It’s worth mentioning that “complex” can have many meanings here. Projects might be technically complex by requiring new technical knowledge, certain performance characteristics or the integration of disparate systems.
As an engineer grows more senior, though, the complexity of a project becomes less technical and more human. Things like involving all the correct stakeholders and properly communicating progress and roadblocks become much harder. One interesting consequence of this is possibly counterintuitive: More senior engineers spend less time writing code and more time writing docs. This happens at Figma all the time, particularly for projects that require a lot of planning, iteration and buy-in.
For Sam Dallas, a senior software engineer at Code Climate, it’s important to work smarter, not harder. “Smarter” in this sense actually refers to spending more time critically thinking about a problem and how to solve it and less time getting the hang of the tools she’s using in the process. This idea also lends itself to problem-solving, with Dallas breaking down complex problems into manageable chunks and asking for help when she hits a wall instead of trying to run through it.
What technical skills do you consider to be the most essential for your success as a full-stack developer, and why?
I studied physics in college and found that the physicist approach applies to dev work: Memorize the basic rules and tools that enable you to think about the problem, and derive — or Google — the rest. I prioritize familiarizing myself with tools at the onset so I am fully ready to focus on the issue at hand once I start to work. For example, I use Ruby on Rails and a SQL database. Because I can use Active Record and SQL comfortably, I can devote all of my thinking capacity to figuring out why the data we’re pulling looks different than expected or why a certain job isn’t running.
I’ve also learned how to pick up new skills faster. I often use Terraform to configure infrastructure in AWS, and there are infinite combinations of AWS resources and settings. With practice, I’ve learned the basic AWS resources we frequently use and how to write Terraform configuration files. As a result, I’ve gotten faster at reading AWS and Terraform documentation and can quickly determine which services to use and how to configure them.
The other crucial technical skill is the ability to separate problems into manageable chunks. The complex projects I work on are often several different intertwined tasks, not a single irreducible problem. If I am overwhelmed by a problem or about to make many different changes at once, I use that as a signal to back up and understand what I’m actually trying to do. I’ll go back to the drawing board and literally write out a plan of the changes required as though I’ll present it to someone else. The goal is to tease apart the smallest possible chunk of work I can do at once, which makes testing easier, reviewing code faster and life less stressful.
I prioritize familiarizing myself with tools at the onset so I am fully ready to focus on the issue at hand once I start to work.”
What’s a soft skill that you also consider critical for your success? Why is this skill so important?
How to say, “I don’t know.” It’s easy to let imposter syndrome convince me that I should know something and that I need to quietly look things up instead of asking for help in a public venue. I’ve had great managers who have encouraged the team to ask for help, and that openness has enabled the team to collaborate better, making work faster and more pleasant.
Communication and dev skills are also inseparable. At every step of the dev process, I use so-called soft skills: I work with stakeholders to figure out what they want to build, provide feedback in code reviews or write documentation for future reference. Sometimes, the actual need can get lost in translation from requests to requirements to technical specs.
By being able to discuss complex technical systems in an approachable way, it’s possible to hold productive conversations about what customers need and balance that against what’s possible to build. When I take the time to ask why we want a feature or how functionality is breaking and discuss the technical details with non-technical stakeholders, it allows the work requirements to be a conversation rather than set in stone. This has helped me identify time-saving workarounds or unknown product requirements early on.
Throughout your career, what steps have you taken to strengthen these skills? And what advice do you have for developers looking to build up their full-stack repertoire?
For me, experience is the best way to learn. I’ve strengthened my skills by taking on as wide a range of projects as possible, including ones I know absolutely nothing about. It’s also important to ask for help when stuck. If I spend more than an hour or two spinning my wheels, I’ll ask for help. Pair programming has been incredibly helpful in both learning how to do something and watching how someone else thinks about a tricky problem.
As a way to work on technical writing, I’ve been adding more detailed explanations to my assigned bugs and tasks. If I’m working on a project in an unfamiliar area, I set aside time at the beginning of the project to research background information and plan how I’ll approach the code changes.
My first engineering boss told me, “You will bring down the site at least once. The important thing is that you tell someone when you do.” This was hands-down the best advice I’ve ever gotten. Engineering sometimes feels like this impenetrable unit of knowledge that was handed to some people and not others. However, it’s just a skill like any other. You absolutely will make mistakes and you won’t become an expert overnight.
The only way to improve is to keep trying and that means not burning out. To do that, make sure you take care of your mental health, and try to surround yourself with people who look out for each other. No matter how urgent an incident or project is, don’t be afraid to put the brakes on and ask questions or for help.
Given the speed that tech moves, it’s essential for developers to keep their skills sharp. Educational courses, books and conferences can help, but Ash Yusufzai, a senior front-end developer at Inshur, recommends learning through play by taking on and sharing side projects.
What technical skills do you consider to be the most essential for your success as a full-stack developer, and why?
As a front-end developer I’d say the essential, very basics of what you need technically would be HTML, CSS and JavaScript. These would be the “bread and butter” on the frontend, as by using these three you could technically build any website. With a good understanding, they can also give you the skills you need to be able to learn some of the more modern frameworks and libraries such as React, Angular, Vue, Typescript, GraphQL, Node, and more.
More and more companies will ask to look at your GitHub. It’s a great way to show your skills as well as demonstrate that you’re proactive and a good learner.”
What’s a soft skill that you also consider critical for your success? Why is this skill so important?
I would say that number one on the list would have to be problem-solving as this is essentially what the job of a developer consists of. The business has a “problem,” which they need to solve, and a developer then needs to translate that into a technical solution to the defined problem. Here, “problem” need not mean “something is wrong” as it can also mean that they want to do something different or expand their platform. Ultimately, all solutions come down to problem-solving. Other than that, communication and teamwork are also essential as part of your repertoire.
Throughout your career, what steps have you taken to strengthen these skills? And what advice do you have for developers looking to build up their full-stack repertoire?
Web development is constantly evolving, and you really need to be keen to learn and keep on top of current trends and technologies, otherwise you can find your skills out of date very quickly. Having your own personal projects is a great way to keep your skills up to date and learn new things. It doesn’t need to be a commercial endeavor, just something fun to learn. And nowadays, more and more companies will ask to look at your GitHub. It’s a great way to show your skills as well as demonstrate that you’re proactive and a good learner.