Posts

Showing posts from May, 2020

Architecture 101: Vision, Properties and Skills

Image
Software Architecture is defined either by accident or by design. Architecture becomes real once you ship your system to production. However you might only see the issues related to poor architecture decisions after some time or as a consequence of scale/hyper-growth. Software architecture is hard. Previously I was blogging about the Design aspect of software architecture and the relationship between Architects and Architecture. Today I would like to cover even more basic aspects like (A) What's my vision on software architecture? (B) What properties should we expect from a proper or well-architect system? (C) Fundamental soft-skills an experienced software architect need to be able to master it. So Let's get started!

There is no one size fits all

Image
Everybody knows there is no Silver Bullet. We all know there is no one size fits all, however, we still look for it. It happened over and over and for sure will keep happening. Before when there was SOA , people were doing SOA wrong and want to fix all problems with ESB. So there was the SOA Rest Guerilla movement ; Let's stop adding things on ESBs and move all to services. Now everybody has coded into microservices, they have distributed monolith in most cases and people are considering removing things from microservices and moving to Kubernetes . Why just run stateless code there right? If we can run all the things there like stateful databases, IoT/Edge, BFF, ML. However, there are other computing models. Most of the couples have Virtualization(EC2 on AWS), Containers (ECS/EKS on aws), Edge(Lambda on Edge for AWS), Serverless (AWs Lambda).

Refactoring to Optional

Image
When we right software we need to worry about so many things. For instance: Performance, Scalability, Security, and many other important concerns. There is also a need to worry about corner cases, error paths, and conde readability from other engineers. Which is not an easy task. So should we return null or not? Should we throw an exception or not? Null is considered to be a Billion of dollars mistake. Languages have some concepts to help us like Haskell has the  Maybe Monad . Scala has  Option . Rust has  Result . Java has  Optional . Since  version 8 , Java improved a lot and there is still a long head ahead but  slowly  getting there. Today I decided to do something different with you guys, let's do a simple refactoring together in order to improve our code and understanding. So there is a video showing from zero to a hero like code step-by-step. This is the first refactoring video I make, hopefully, it will be interesting for you guys. Without further due, let's get star

The Death of microservices - Distributed Monolith 101

Image
It does not matter the question; the answer is Microservices Architecture(MSA). Feel that way too? Are companies doing proper microservices at all? Would it be just everybody just calling "microservices" and doing all sins against microservices? Let's adopt microservice now, okay. What problems are we trying to fix? I know I want to do it because it is everybody doing, are you sure? I think I know what I'm doing, are you? Well, "the road to hell is paved with good intentions." The problem was happening before the SOA era; we had this problem before, microservices still have it, Serverless the same. OH, this is backend thing, buddy we are good at Frontend or in BigData, DevOps Wrong! It's everywhere! If there are software and distribution, potentially, you will have this issue, which is not minor. 

Thoughts on Backward and Forward Compatibility

Image
Compatibility is hard. Depending on the nature of your component/service it could be very unstable by nature. Let's consider an Adapter Pattern for instance or APIs that integrate 2 other APIs, easily they will be breaking on every API change at any side. Even with mundane, regular APIs and Services, compatibility can be very hard to achieve. So, what should we do? Break all the things all the time? Be backward compatible with all versions forever(Which there are a huge price and source of complexity) or maybe there is a middle ground approach we could take? Backward compatibility is only one part of the story the whole compatibility story is much more complex involving Forward compatibility, Isolation, Interfaces, and lots of subtle details. There are the different contexts where software can live so under a microservices in one thing, shared application code is another, shared lib or company framework is completely different stories as well. IMHO at the scale, it does not matte

How Many Hours Should I Work?

Image
So this is a hot-button issue for many people. I',m by any means not trying to be preachy and say what's right or what's wrong, this is just some of my perspectives on the matter.  Many people don't like to work more than 6h and thats fine. Given the level of execution I like to play I really think I need more hours. Working as a consultant you really do not have holidays or day offs, you work you get to pay, do not work dont get paid. Even as you get raises and progress in your career as consultant hours will always be a thing. I have that. You easily could call me a workaholic, a victim of the system, or simply someone who gets things done. I'm not saying that people who work fewer hours get fewer things done. Every one was a different moment and whatever works best for you it might not work for me at all or vice-versa. So do not see this as a workaholic-apology. At the end of the day what matters is: (A) Are you getting things done?, (B) Are you healthy or sust

DevSecOps: Are we reducing silos now?

Image
DevOps, as movement and set of principles, did a great job making Operations and development the same integrated thing pretty much. However, industry-wide implementations are not quite there. There is an overlap with SRE(Site Reliability Engineering), and quickly you find DevOps Engineerings, DevOps Architects, DevOps Directors, DevOps Managers. There are plenty of DevOps departments out there. The same noise happened with Agile, where the company structures do not change, and silos still exist. Now we are about to extend the reach of DevOps to Security. Belive me of not the naming does not bother me much. There is a DevSecOps manifesto.

SRE 101

Image
SRE is pretty how right now. Several companies are interested in but do people really know what it means and how it can be done? Lots of people asked me about what I think about SRE and what's the relation with DevOps. So I record this video and hopefully will help you to understand what it means and grasp some of the basic concepts and practices.  If you are doing DevOps correctly you are doing SRE. SRE is like the DBA in the 90s easily one of the most important folks on the company keeping the business running and make sure users have a good experience in sense of no service disruption or no slowness. So let's get started!

Feature Enrichment with Spring Data Redis and Lettuce

Image
Lettuce by far is the best Redis client out there for Java. In the java world, Annotations and Mappings are pretty popular. I build services using these concepts before however they were always under the service boundaries, never as shared libraries in order to avoid coupling. So today I record a video showing how we can use this feature and also extend the functionality to add custom enriched behavior.  We will be using Spring Boot 2, Spring Data Redis, and Lettuce as redis Client. We also will need to have redis running either as standalone / cluster or running on docker. We will create custom annotations in order to describe the behavior we want. I need to say that some people love and other people hate annotations, I have mixed feelings. Often for those that don't like it - check this out . Besides that, let's take a look. So Let's get started.

Education vs. Learning

Image
People asked me, what do you think about university and education, how do we know what we should learn and how to prioritize our studies? All valid and taught questions. For most Brazilians, the university does not make sense. I get it why, because when you join the workforce, you see very few usages for the skills or subjects you were looking at university. So I believe there is a list of 5 essential aspects you need to consider before deciding to drop out(IMHO you should not drop out). So what are five elements I'm talking about: What is your goal? What makes you happy? Where do you want to go? Short vs. Long term No Boddy knows the future. Education vs. Learning Let's go trought them one by one. But before I went there, you need to keep in mind that this is your life, it's your call and ownership at the end of the day, beware that nobody can answer this questions to you. Coaching and mentorship can deftly help you as you are starting your career or just piv

Interview Questions

Image
A couple of days ago I was blogging about hiring . Today I want to continually expand this subject but focus on interview questions. So this could help you in 2 ways. First, as you will need to interview people, it can help to build you interview script or even that preparation is hard and every company is different and has different cultural FIT I would say there some questions which are common or even make sense to be ready to answer. So I have a video to go throught the Interview Questions towards soft-skills / people questions. So Let's go!

HMAC in Java

Image
In 2018 AWS CTO(Vogels) said : "Security is everyone's job". For the last 2 years, there was so many famous and big data leaks and breaks that made that statement be very true more than ever. Security often could mean worst performance and worst user experience so in order to get it right you really need to think about the designs before jumping into to code and consider performance and user experience has main requirements.  I was thinking about writing about how to do HMAC in Java for a while and recently Redis 6.0.0 come out and to my surprise, there was a refactoring on the password part in order to use HMAC.  Security easily could scare engineers often because it is not something well spread yet but I believe this will change soon. It does not matter if you have to deal with PII Data or not, security is super relevant because everybody is running their workloads at the cloud or with IoT and Edge devices which means more distribution, more code, more points of fail

Hiring is Broken: How we fix it?

Image
So this is a very Flammable topic, I really thought a lot and like all good and complex things, I got mixed feelings about it. After careful considerations, I decided to blog about it. Seriously I was thinking about writing this blog since 2015. So now I think to write down my experiences and thoughts about the subject. Maybe now during the COVID-19 because there are layoffs and hiring freezes things will change and hire might get fixed but let me talk about these experiences before march 2020(COVID-19 Strikes). The technology was always about people, talent people are hard to get and there always was and there always will be a fight for talent. So you might be thinking id there are a lot of companies hiring and lots of people doing hiring process things must be smooth right? Repeatable/Scalable, Clear, and really no issues right? Well, we are not quite there yet. So the first issue when you are talking about the subject could sound a lot of bad things like OH: you are doing the hiri

timetracking-rs: Tracking Hours in Rust

Image
I worked with Technology for a long time. I created a Python script 10 years ago to manage my working hours for control, observability, backpressure purposes. Last Friday night(What a nerd thing to do, I know), I re-wrote this script into a Rust program. I always like to build my own tools, for several reasons, like make my work more productive or just because I want an excuse to do something useful for me in a language that I liked. It took me about 4h to figure out how to do this in Rust. There were 2 basic challenges with was Strings(OH I hate Strings in Rust) and working effectively with Data/Time math operations. I would 2 hours figure it out and making this work and 2 other hours refactoring the code to make it better. Overall code with Rust is pretty productive and fun however Strings and pain in the ass. So I'm using this program every day (decommission my old python script) - so this might be useful for you too. Let's get started.

Idea: Configs and Stream Debug

Image
I work with Java for a long time. I always used eclipse. I like eclipse IDE. However I need to admit eclipse is pretty much dead, specially scala IDE wish I used a lot but unfortunate is long dead. So IntelliJ Idea is alive and has some interesting features like being alive first of all and also easily I could say performance is pretty good and you dont want need to install lots of plugins. So I made a video showing some configs that will make your life easier if you came from eclipse like me and also share some killer features for Java Streams Debug. I always like eclipse but I dont have issues using Idea, I believe 2 things. First of all changing editors, IDE is always good for experience and open your mind and secondly, you should not be attache to any language, IDE, editor or tool, these things are tools and there is the best too for the jobs, this tools dont define you and you are bigger than this tools. So the tools should serve you and not the other way around.  So Let's