The T-Shaped Engineer Strategy

Natserract

Natserract

Apr 12, 2024

The T-Shaped Engineer Strategy

First off, when back then 2-3 years ago...

I learned several programming languages like Rust, Haskell, Elixir and ReasonML. During that time, I built several fancy projects. I felt happy and thought I needed to learn as much as possible. That’s not without reason, I’d to prove and challenge to myself I can go there! I shouldn’t wait for a miracle and just sit with my laptop, then lament my fate!

I never fear trying new things. Doing some hard work, ask questions on forums, discuss with Haskell engineers (Cabal contributor), and build more than just CRUD apps. I don't really care about people who say, "Why bother?" or "It's hype!" I keep trying to stand out from the crowd. The path feels steep and challenging, but I have fun with it.

I do all these things for investment. I believe learning is the greatest investment in myself and can be impactful for anyone. I hold onto that belief and keep running, learning as much as possible. However, as time goes on, I realise I’ve found some mistakes.

The reality was that I have absolutely no in-depth expertise of these programming languages. I was just scratching the surface. I was really spinning my wheels, with no professional experience related to these things. I was struggling, unsure of where to go next. Take it or leave it?

JavaScript

Long story short, I have a new job. Can you guess what? Yes, this opportunity gave me into the reality. The “worst programming language” (as they say), YKWIM? Yes JavaScript. I’m back, and I started exploring JavaScript deeply. But again, i felt a struggle where should i go? Frontend or Backend? At this point, I calmed down a bit, at least I have one weapon ‘Write Once, Run Anywhere’. So I decided to focus on full-stack development, I don’t know, I need more and more. I don’t want to be a programmer who can only build User Interfaces. I want to build real-world software and release it to production from my own.

The broader things you take, the more big amounts of time you’ll to it.

Nowadays, the industry need to ship faster, move fast and break things. They need some software engineer who’s have wide skills to be productive in multiple areas. Those specifics lead companies to look for smarter ways to work. But in order to do that, the industry needs different talent.

Keep calm and don’t scare, you need to think smart and not only be there. Take actions! Prove it! We need a well-thought-out strategy.

Build Strategy

“Jack of all trades, master of one”

Being “Jack of all trades, master of one” which means having a broad range of skills but excelling in one particular area. You can be a specialist or a generalist anytime. Perhaps you are specialist during the day in your current job, and then a generalist at night when working on your side projects.

"You can make buffalo go anywhere, just so long as they want to go there. - Jerry Weinberg, "Secrets of Consulting"

It could be easily for your learning process, when learning a new programming language, the learning process can be straightforward. You typically learn different syntax, but the underlying concepts remain similar. The concepts may have different names or be referred to differently, but they are fundamentally alike.

Focus on specific task

Second, in case of learning something, don’t create a large portfolio project at once. Instead, separate it into specific and single tasks, and create documentation based on those tasks. For example, for an order system, instead of building a large task, you can split it into components such as:

  1. Authentication and authorization
  2. Shopping cart (cache, storage)
  3. Product catalogue (search, optimization)
  4. Notifications system (3rd party integrations)
  5. Reports and analytics

Break down complex projects into smaller, manageable tasks, and document each task separately. This approach will help you focus on specific aspects of the project and improve your understanding of the software engineering process.

Write and Publish

I think writing are the most important skills for a software engineer. Writing helps you discover if you understand a topic as well as you think you do. If you can teach something, you know it.

Conclusion

These all strategies should help you become a fast learner, and I assume they could also help you find a job. In my case today, I have decided to focus all my efforts on becoming an expert in JavaScript. I will learn advanced techniques and work professionally with this technology. If I need to use other technologies in the future, I can reimplement them based on my current knowledge and experience with different domains and vice versa.

By the way, lastly i’ve been exploring the software architecture domain driven design (DDD). It’s interesting because DDD is not only about architecture, it’s about deriving your design from the business domain domain. Check it out! https://github.com/natserract/backend-trainee/tree/master/apps/node-ddd-ca

Additional reading: