What is Full Stack?

The first link on Google says: “A Full Stack Developer is someone with familiarity in each layer, if not mastery in many and a genuine interest in all software technology.”

I think I am a full stack developer.

I built Windows desktop applications from scratch using WinForms/C#/SQLite3 and I built websites from scratch using Meteor/JavaScript/CSS/MongoDB. I know C#, C++, JavaScript, a little bit of Ruby and even Pascal.

But I don’t think it’s the knowledge or the experience makes me a full stack developer.

In my opinion, full stack is not about the knowledge, but about the attitude.

It’s about the attitude to try the best to solve the problem. It’s the attitude to deliver the best user experience.

Let me give you an example.

Last sprint I was on a task to find out how to make browser support a special “png” file. The “png” file is created by the backend team and it consists of multiple pngs. The problem is that the browser will only display the first png in the file and we want to display them all.

Initially I thought the file was in this APNG format or MNG format. According to Wiki, the browser has very limited support of those formats.

That seems like a dead end. But we do want the browser to support it.

“How do we do that?”

Looking around, I did have a Java tool from the backend team that can open this special “png” file and display the multiple pngs correctly.

I was thinking:

“How does this Java tool support the file?”

Then I tried to find on confluence pages and contacted the backend team but could not get any information about the format of this file.

At that time, It was tempting to make the task “blocked” as lack of information.

I almost did, but on a random thought, I remembered in my last job I was decompiling C# program to see how it works. Java is very similar to C#.

“Maybe I could decompile the Java program to see how it works? “

I downloaded a Java decompiler and decompiled the Java program. I found out the how. Then I used a hex viewer to examine the “png” file to verify the theory:

As you can see, the png file header (0x89 50 4E 47 0D 0A 1A 0A) appears in the middle of the file.

So the special png file is actually multiple png files concatenated together.

Then I implemented the same logic in JavaScript and we could display the “png” file perfectly.

The task was completed. We finally found a way to support this special “png’ file format with limited information available.

As software engineers, we build products to solve problems. Full stack is the attitude you carry when trying to solve the problems.

  • If the problem requires you to do some backend changes, you code with Java or write SQL;
  • If the problem requires you to do some frontend changes, you write JavaScript or adjust CSS.
  • If you are a front end developer, you don’t afraid learning backend stuff, vice versa.

You don’t let the knowledge boundary to sit between the problem and the solution, you do whatever it needs to do to solve the problem.

When you are full stack, you are actually no stack.

As Bruce Lee said,

“Using no way as a way, having no limitation as limitation.”

Are you full stack, my friends?