Software Engineering Career: Technologies vs. Principles

A few weeks ago I got a LinkedIn connection request from a fellow Indonesian software engineer. Then a few days later he asked me several questions about his software engineering career, in this article, we will share his questions on his software engineering journey and how he can do better.

Image for post
Image for post
Photo by Danial RiCaRoS on Unsplash

Portfolio

Without further ado, let’s get started. Here’s his first question.

So now I build a software engineering portfolio. But I feel stuck where to start. I am a little confused about the skills that really need to be mastered, whether the engineering principles or the technology?

There are a few points I want to highlight here, there are

Let’s discuss one by one.

Engineering Portfolio

If we discuss an engineering portfolio, I think the first question is why we want to build it? Is it only for the sake of a portfolio or we want to land our dream job using that portfolio? Or we just want to have a collection of portfolios that we can share with others in the future.

Image for post
Image for post
Photo by Joshua Aragon on Unsplash

If you only want to have a portfolio only for the sake of a portfolio I think this is not a good place to start because you don’t have a good reason to start. If you are in this situation, a better first step would be setting up goals and expectations about why you want to build it in the first place?

It is a different story if you have a specific goal like want to be a mobile developer or data scientist, now you have more specific goals. The problem with software engineering is, now there are a lot of diverse subjects in software engineering, ranging from

Since there are lots of variations if you have specific goals like being a good mobile developer you can start building a system to demonstrate your skill in this area. Or if you just started, you can build your portfolio by having all your code online, whether it is public or private, at least put your code in GitHub or GitLab, so you can show it to other people and pitch yourself if someone asking you about a specific area in the mobile development.

I love to document all my code in online Git repositories as well so that I can search easily if I want to solve a similar problem. So, if you just getting started or testing out new technologies, just put it on the internet, preferably public so that people can see what you have done.

Lastly, if you only want to document your code or work you have done online, I think you can start by having clear documentation or README.md in every public project you write, that way people can understand that you are very organized and people can learn more about your project easily by reading the documentation.

Skills need to mastered

I want to emphasize things that I always talk about in my blog that challenges in every organization usually varies from one organization to another. People are complex and their interactions can create a more complex system. Then if we recall Conway’s Law:

“Any organization that designs a system (defined more broadly here than just information systems) will inevitably produce a design whose structure is a copy of the organization’s communication structure.”

The system you build will reflect how your organization communicates and interact. Thus every organization has its own unique challenge and context. So things that big companies like Google running planet-scale system are most-likely different from companies in Indonesia trying to achieve product-market-fit in their product category.

Additionally, the tech-landscape in Indonesia is a bit different from (let say) US-market. Tech-landscape in Indonesia is less mature since we only started in the e-commerce boom (2010–2012) compare to let say India or the US which already started long before us. Although the software system is already being made prior to that era, the adoption rate is just starting to be big in recent years here.

So, there’s a bit of difference in priorities. Startup in Indonesia needs software developer and engineer to build feature and put less priority in scalability, although some good companies did in the early days, again time-to-market is more priorities here in Indonesia and engineer in Indonesia is mostly users of technologies like React (in the frontend), Node.js (in the backend), Rails (full-stack), and many other technologies. We are not in the stage where lots of technologies are being built here in Indonesia, since the priority is less different.

I also a hiring manager myself in various companies I worked for in the past and present, and the quality of software engineers is quite low here. I talked with engineers who already 5 years in the industry but they only do the same thing again and again. Moreover, they don’t know how to build systems and how the system interacts with each other to create a larger system. When discussing system design they always think about the CRUD system using REST API. No variations and out-of-the-box thinking.

However, I believe in the next few years tech landscape in Indonesia will be so much different, there will be more unicorns, more big companies going digital and there will be more emphasis on scalability and performance and not only building features. So fundamentals like data structure and algorithms, problem-solving, critical thinking, and deep understanding of computer systems will be the key to support 250+ million Indonesians.

Engineering principles

The answers have changed.

I want to start this section with a nice TEDx talk where he emphasizes how the majority of people are always wrong and how we can think outside of the box. Here’s a quote from the video.

We live in a world where the questions might be the same, the answers have changed. In other words, what has got you here, will no longer get you there.

And yes, someday us the same engineer who works in this era might be older and facing different challenges in the future. The questions are the same (building software system), but the answer has changed (more challenges like scalability, performance, backward-compatibility, etc).

So yes I agree to strengthen our engineering principles and knowledge is so important. Here’s a few things I can recall

Here are some resource you might find useful

Technologies

Also, he adds a follow-up question.

But I am a bit confused about the job requirements of the developer, I think the difference is only whether I have/haven’t used the technology mentioned. So, in my opinion, as a developer, which one is better between being familiar with a lot of technology or just exploring a few technologies?

For the technologies part, I think it has equal importance as engineering principles in your tech career. Because you need to implement the concept in your head and turned it into a code.

Image for post
Image for post
Photo by Ante Hamersmit on Unsplash

Then if you asked me should I learn only one or should I learn various technologies, I think we should do both. Master one technology as your daily-driver and learn another one as a way to enrich your thinking and avoid being trapped in tunnel vision. It helps us to think outside the box.

We are hiring!

We are a digital tech agency and currently hiring for a remote full-time and internship position. If you believe in our mission to bring high-quality software to the masses and in doing so helping software engineers in South East Asia raise the bar, drop your CV and we’ll talk.

Kulkul Technology

Coding is Kul

Sign up for Kulkul.Tech Excellent Software Newsletter

By Kulkul Technology

Learn how to build excellent software directly from the man behind Kulkul.tech. Take a look.

By signing up, you will create a Medium account if you don’t already have one. Review our Privacy Policy for more information about our privacy practices.

Check your inbox
Medium sent you an email at to complete your subscription.

Abdurrachman — mpj

Written by

yet another so called software engineer. currently building @kulkultech

Kulkul Technology

We’re on the mission to brings high-quality software to the masses through customer-obsessed consulting, training, and mentoring. (PT Kulkul Teknologi Internasional)

Abdurrachman — mpj

Written by

yet another so called software engineer. currently building @kulkultech

Kulkul Technology

We’re on the mission to brings high-quality software to the masses through customer-obsessed consulting, training, and mentoring. (PT Kulkul Teknologi Internasional)

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store