How to create a System Design?

Whenever we start building a new solution, or review an existing one for improvements, experienced developers starts from the System Design.

Today I’ve watched an interesting video about System Design Interview: A Step-by-Step Guide by Alex Xu.

Even if you’re not preparing for an interview process, they are useful steps to guide your Architecture discussions!

  1. Understand the problem and establish the design scope
  2. Propose high-level design and get buy in
  3. Design deep dive
  4. Wrap up

Alex Xu is the author of the best seller “System Design Interview” book and ByteByteGo blog, which I highly recommend to follow if you have interest on this kind of contents!

Hope you enjoy the content! Would be happy to hear your thoughts! 🙂

Most important skills for Software Architect?

Some weeks ago, a young developer asked me:

“Yugo, What exactly is Software Architecture?”

If you search on the Internet, you will probably end up finding many definitions.

My favorite comes from Ralph Johnson, in the article “Who Needs an Architect?” by Martin Fowler:

“[…] shared understanding of the system design […] components and interfaces that are understood by all the developers”

And what is interesting about this quote?

Is how the author highlights the social aspects of the architecture. 

Indeed, EVERY architectural work we make, if it’s not shared and understood by our team, loses its VALUE!

So, if you want to grow in the technical path and become a software architect, great communication skills and sharing your knowledge is VERY IMPORTANT!

Of course, having good technical background and making good tradeoffs are important as well, but you will need skills above to extract greater results 🙂

How about you? What is the most important skills for a Software Architect?

Do I need to stay up to date with new technologies?

Have you asked this question to yourself before?

The chance is high.

If you are a Web Developer and try to learn every single framework or library available in the market, you’ll realize soon how INSANE task it is!

Because… it REALLY IS!

So, what can we do?

Well… I had to change the approach

Instead of looking for everything, first I had to start defining my career focus.

Ok! Wasn’t easy nor instant thing… but once I had my focus, the most effective practice to keep me updated with new and interesting technologies was to CONNECT with people that are connected with my focus!

  1. Connect with experts to learn their path and discover better ways to achieve your goals!
  2. Connect with peers to have discussions and overcome challenges together!
  3. Connect with beginners and start doing more to help them grow!

That was a game changer to clarify what is IMPORTANT for ME to learn and keep up to date.

How about you? How do you keep updated with new technologies?

Share with us! I’ll be happy to listen different ideas =)

I want to stay relevant on my Team!

While trying to become a better architect and start leading my team, I’ve asked myself many times how to stay relevant and keep growing in my career…

Did you feel the same?

It’s a common question also asked by my fellows and mentees.

And I see no easy answer since it’s subjective and our industry changes all the time!

I’ve separated three great tips that I’ve learned from my day to day to help me keep up with the team:

  1. Find your focus to become a consistent and reliable professional
  2. Understand your team’s goal to create good tradeoffs and make better decisions
  3. Help building collaborative environment to go further and achieve more with your team

How about you? Have you developed other ways to keep up with your team and career? Share with us! I’ll be happy to listen different ideas =)

To help find your focus and gain consistency, I strongly suggest reading these great titles:

How to become a good technical leader?

Some days ago, a friend of mine asked “How to become a good technical LEADER?”

The transition from developer to a technical leader position is a challenging moment…

I remember how much I struggled when I went through it.

During the process I’ve learned three precious actions that helped to improve myself and become a better leader for my team.

  • Focus on the real problem to make better tradeoffs
  • Understand my team strengths to boost their potential
  • Experience our application end-user routine to gather valuable insights

Keeping these actions in mind helped me to become a better leader for my team and focus on what matters.

How about you? Have you learned other ways to become a better technical leader?

Share with us! I’ll be happy to listen different ideas =)

Food for thoughts

If you like this content, I strongly recommend also watching this video from Simon Sinek about being a Leader:

Most Leaders Don’t Even Know the Game They’re In | Simon Sinek

4 actions to help Web Developers make good technical decisions

At some point in our development career, we collect enough experience and start leading technical decisions for our teams.

Some of them can be exciting, but others are very challenging if you don’t do the right trade-offs.

There are many approaches and plenty of content on the web. Here are my 4 essential actions to help you make good technical decisions:

Understand the business real problem

The business is the real problem and should be the root of every technical decision you do.

Rather than implement a Microservice or Monolithic architecture, use React or Angular, you can only make good choices when you understand the business real problem and put it in the center of your trade-offs.

No matter how great you craft something if no one needs it, right?

Make sure to have a clear and well-defined problem. Be present in business discussions. Connect every decision you make with the business problem it solves.

Once I thought since I’m a tech guy, I can focus exclusively on technologies and architectures, and let the business decisions to the business guys.
In the end, I see myself wasting time concerned with things with no real value and trying to fix issues no one cares about.

Evaluate your team skills

Teams are very unique. Each member has their own background and skills at different levels.

Evaluating your team skills is important to get the right tools and frameworks that enhance team productivity as a whole. Since software development is a group task, relying on a highly effective team is better and safer than on a single highly effective developer.

Involve the team members to figure out the best decisions for the whole team’s productivity. Make the entire process transparent for everyone to collect honest feedback.

Once I was responsible to decide the technology stack for a new project. I’ve made a lot of research and comparisons between the best options available at that time all by myself. When I finally came up with my “best stack”, it might have worked to build the solution but isn’t the right one for the team very late.

Experience the end-user’s routine

Experiencing the end-user’s routines is about getting closer to the real problem domain experts and developing empathy. They are who define the success of your product because they feel the pain you are trying to solve.

If you are really concerned to deliver value and make an impact on your end-users, sit on their side, and hear what they have to say. Work with them. Rich insights come from this action and can be a game-changer to success.

Once we have the opportunity to stay weeks validating the very first prototype together with the end-users, on their site. Amazing weeks! It was not easy, but every piece of feedback collected was so valuable to understand their real needs and building the right solution.

Avoid the hype complexities

All those ultimate, shiny, killer frameworks or architectures on the hype are tempting to use for any tech lovers.

Hypes tend to make us look only after the solution and forget about the real problem. When making hype-biased trade-offs, there is a high risk to adopt the wrong tool and bring unnecessary complexity to your business.

Technologies and architecture are created to help us solve a problem, not to bring more problems. Stay focused on the real problem to make non-biased and relevant trade-offs. Keep things as simple as you can.

Conclusion

In our development career, when we start leading technical decisions, we need to have a process, so we can make GOOD decisions.

Practicing the 4 essential actions in this article helped me not only make good technical decisions but also be consistently making good decisions.

How about you? Do you lead technical teams? Do you have to make technical decisions for others? I told you mine, but what is YOUR approach to making GOOD decisions consistently? Share with us!