Developer has to know everything

I've been working on many different projects as a tech leader. At some projects we were hiring people, and during interview I was realizing that actually majority of devs don't have fundamental understanding of basic concepts. By understanding I don't mean learning them by heart. I mean understanding why things work the way they do. For example, why do we have to use binary in programming? Or what is a computer? How can you build a software for a computer if you don't know what a computer is?

This article is not a complete overview of the whole frontend knowledge map. Instead, I will try to show things from a different angle: how to apply systems approach and generic research techniques to learn anything. I hope this will boost you somehow. Let's start.

What is the goal of Software?

Let's break it down: hardware and software.
Hardware is a physical device. Hardware can be programmed though. Initially, all the programming was done on hardware.

This led to a problem of slow iterations. If you want to change something in hardware, you have to replace or patch the hardware. It was complicated and expensive.

Later people came up with software. Basically ability to build and deliver program to a hardware. The hardware would still have some firmware, but in this case it was more generic and flexible.

C language was the revolution, because it allowed to give very high level of abstraction and to write code that is very close to the hardware. It's funny that nowadays C is considered low level language.

For the last 80 years people have been working on improving development process to reduce time from idea to the production and to improve quality.

What is backend

First programming was used in military and government. Later it came to business as well. Backend developers at that time were developing programs to support business processes like accounting, manufacturing.

I won't cover this in details, but keep in mind, that backend is something that is running required business processes, using tools like database, messaging systems, cron jobs, in-memory databases.

What is Frontend anyway

First programs were just simple terminal applications that would take input from the user, do some calculations and would display some output.

However, to optimize more complex processes terminal was not enough. Therefore, GUIs were invented — Graphical User Interfaces. They would allow to interact with the software in a more natural way. Basically documents and blank forms were displayed on the screen using some code.

The reason to separate Frontend development from Backend was because the context of the problems was too different. In backend you deal with distributed systems, databases, networks, uptime.
In frontend you deal with UI/UX, different devices, different screen sizes, different browsers, and many niche specific problems.

What you need to know

Developer has to know everything

First, consider key components. They are:

  • Computer
    • CPU
    • GPU
    • RAM
    • Display
    • SSD
    • Data bus
    • Power supply
    • Keyboard
    • Mouse
    • Other input devices
  • Backend
    • Servers
    • Databases
    • APIs
    • Network
  • Users
  • UI/UX designers
  • Backend developers
  • Product managers
  • QA engineers
  • DevOps engineers

You need to understand this pipeline

  1. User types in the browser address bar https://your-application.com
  2. Browser parses the URL to identify protocol (HTTPS), domain, and path
  3. Browser checks its cache to see if the DNS resolution is already available
  4. If not cached, browser initiates DNS lookup through the operating system's resolver
  5. OS resolver checks its local hosts file and DNS cache
  6. OS resolver sends a DNS query to the configured DNS server
  7. DNS server returns the IP address of the nearest CDN edge server
  8. Browser initiates TCP connection to the CDN edge server IP on port 443 (for HTTPS)
  9. TCP three-way handshake occurs (SYN, SYN-ACK, ACK)
  10. Browser and CDN server perform TLS handshake to establish encrypted connection
  11. Client sends "Client Hello" with supported cipher suites
  12. CDN server responds with "Server Hello", certificate, and selected cipher
  13. Keys are exchanged and encryption is established
  14. Browser prepares HTTP request headers (User-Agent, Accept, Cookie, etc.)
  15. Browser sends the HTTP GET request to the CDN server through the encrypted connection
  16. CDN edge server receives the request and checks its cache for the requested content
  17. CDN server retrieves the cached static files (HTML, CSS, JS) without backend processing
  18. CDN server prepares response headers (Content-Type, Content-Length, caching directives)
  19. CDN server sends the HTTP response with status code and HTML content
  20. Browser receives the response and begins processing it based on Content-Type
  21. Browser validates the response (status codes, security headers)
  22. Browser begins parsing the HTML document, creating tokens for each tag, attribute, and text
  23. Browser constructs the DOM (Document Object Model) tree from these tokens
  24. Browser discovers and prioritizes resource requests (CSS, JavaScript, images)
  25. Browser sends requests for critical CSS and blocking JavaScript (also served from CDN)
  26. Browser constructs the CSSOM (CSS Object Model) tree from CSS responses
  27. DOM and CSSOM are combined to create the Render Tree (only visible elements)
  28. JavaScript parser compiles and executes scripts based on async/defer attributes
  29. Browser performs layout/reflow (calculating exact positions and sizes of elements)
  30. Browser creates layers for content that should be independently composited
  31. Browser performs painting (converting render tree to pixels in each layer)
  32. Browser performs compositing (combining layers with proper stacking and blending)
  33. GPU processes the composited framebuffer data
  34. Display controller sends the pixel data to the physical screen at the refresh rate
  35. Browser establishes event listeners for user interactions
  36. UI is continuously updated in response to user interaction, timers, and network events

It's ok if something doesn't look familiar at the moment. You should google it right away. Or check some source code of v8.

You need to understand what people want from you

To understand what people want from you, you need to understand what kind of people there are involved.

In outsourcing companies there is a customer and team of developers. There are also end users that will use the product.

If you are working in a product company, customer is actually stakeholder within a company.

Also depending on type of product, whether is's B2B or B2C, you will also have different considerations, constraints and requirements.

Customers don't know what they want

This is what product team is for. But customers always almost know what they don't want. With proper investigation you will be able to find out what they actually want.

The point of this is to understand core process of customer development:

  1. Define business objectives and success metrics for the product
  2. Stakeholder interviews to understand organizational goals and constraints
  3. Market research to identify trends, competitors, and opportunities
  4. Create user personas based on research data, not assumptions
  5. User interviews with target audience to uncover pain points and needs
  6. Journey mapping to visualize current user workflows and pain points
  7. Job-to-be-done analysis to understand what users are truly trying to accomplish
  8. User flow mapping to determine optimal navigation paths
  9. Wireframing key screens to establish layout hierarchy without visual design
  10. Content strategy development to plan messaging and information hierarchy
  11. Design system updates to establish consistent UI patterns and components
  12. Prototyping at appropriate fidelity level (low to high) based on testing needs
  13. Usability testing with representative users to validate design solutions
  14. Visual design refinement to create aesthetically pleasing, on-brand interfaces
  15. Animation and transition design to enhance user understanding and engagement

You don't have to know how to do all of this yourself. But it's important to see how frontend implementation is related to the design process which is behind the scenes. This way you can see the meaning of what you do.

Do you have team/tech leader?

There is a probability that on your project you will have someone actually responsible for the whole result. Decent team leader will support you, teach you, help you to grow.

Unfortunately, sometimes there are communication issues between devs and team leader. For example, developer delivers the code and team leader checks it on code review and tells that it's looking shitty.

Yes, I think it would be hurtful for anyone to hear that. Especially if you are junior developer, busting your ass 12 hours a day to get things actually done while the team leader is drinking coffee working literally 20 minutes per day.

How to deal with it?

Understand the root of the problem. Be pragmatic, use system thinking. If someone is not satisfied with the result, first thing is you have to understand — why are they not satisfied? Did you both agree on certain criteria? If not, why did you start proceed to task without agreeing? Why did your team leader allow this process to work that way?

If something happens and people are blaming each other — it's a sign that there is a problem with the process. And it's more of a sign where the person responsible doesn't want to admit his mistakes.

Everyone makes mistakes, it's not a big deal. The only important question is — are you learning from them? If you are in an environment where nothing gets done, and mistakes aren't getting fixed — you need to change your environment.

Find problems and act

If you want to grow, it doesn't matter if you are frontend developer, designer or car washer. Your employer wants to live in a better future. If you help them to achieve that, you have a chance of setting up more strategic looking relationship with them.

In terms of Frontend development, here are the most common problems that you can find:

  • Time to market is not reducing or doesn't even get tracked
  • No clear definition of done, lack of requirements
  • Developers can't answer question — why are they doing what they are doing, what is the real value and purpose
  • margin-top: 15px — 15 is not divisible by 4, and margins are anti-patterns as hell, this is why
  • No dev and testing workflow defined
  • Requirements are changing during the work sprint
  • Backend API is not documented
  • Backend API is using REST (huge anti-pattern, but people believe that's the standard)

Keep the professionalism

Other people see and remember what you do in public. You have to keep professionalism. See the goal clearly. Make sure everyone is seeing the same goal. If there are conflicts, propose a solution, stand on it, but be respectful.

This is mostly enough to be a good developer. All the rest — you can learn any time. Most of the problems come not from the lack of knowledge, but from missing the right initiative. I hope that you readers see the point. Now since I've finished this article you can go and google all new words I've mentioned.

Good luck!