Posts

Showing posts from March, 2020

Pipelines From CI/CD to Self Operating Systems

Image
Several years ago everybody was talking about and trying todo deploy automation. This is a fixed problem, right? well, several companies now have good pipelines but most of the tech industry is not quite there. There are several reasons why release pipelines are more important than they look. First of all, Deploy != Release, I talked about that on my previous post about Testing in Production . Several companies have doubted if they need the newest forms of CD(Continuous delivery) like GitOPS but I can say almost 100% sure, this is a must-have. So let's step back and talk about Lean and Kanban and business agility. Even if your business is not asking to increase your deploys and release frequency you should be in pursuit of that. Lean has the concept of LEAD TIME, DevOps is about Lean if you have doubts go read the amazing Phoenix project from Gene Kim. Lead time is about from Idea to Production and how long it takes to get there. Production is the best place to be, so you must i

Cool features you missed from Java 8 to 14

Image
Java is In a different cycle releasing features from very short cycles which are considered for some folks not ideal. IMHO it's great because it faster innovation and make the language alive. There are some folks saying that java is just copying features from other languages but I dont see issues in that, actually this is good.  Java is a very old language 1995, however, it still used a lot at the enterprise and used to run most critical programs like databases, search engines,  distributed log, and message brokers, HTTP servers and several other key components that we use day by day.  Today for this blog post I want to share some features that you might miss from java 9 to java 14. There are some interesting features which could help you every single day.

Software Architecture and Architects

Image
As a consultant, a question I got a lot is what is software architecture anyways? What should architecture do, what is the skillset it needs to have? So, first of all, I believe everybody in your team should be a software architect. That's the silicon valley way. Brazil has a huge demand and very few qualified people for us to work in that model which ends up having a few software architects per company. Hiring is extremely complicated, slow and difficult and easily you will pay a lot for someone who is not a proficient architect. However, develop these skills is a good idea for every engineer there are a couple of problems like A) Not everybody wants to be an Architect. B) It takes time. Companies dont have time and the demand is here; So this forces a pre-mature software architect exposure. At the end of the day, it does not mean this is a bad thing. Having opportunities is great for everybody but it all depends on how you develop and use your opportunities.  Going back to the

Struct and Traits in Rust

Image
Rust is not an OOP language. However, is possible to have similar behavior using Structs and traits. Traits are great because allow us to create common and interfaces and allow structure for generic coding. The struct is like a struct in C. They allow us to have Pojos and hold both data and behavior using traits.  Today I want to show you guys how we can work with struct and traits in Rust. This is another short video focusing on understanding and also you will learn somethings about macros as well.  So I hope you guys liked it, let's get started !!!

Linux Terminal Goods III

Image
This is the third post about some awesome and productivity console apps for Linux. So you might check it out the second and the first post if you haven't checked yet. More is more folks are doing remote work . For sake of safety everybody needs to #StayAtHome but besides the COVID-19 working for home is much more productivity anyways. So if you work with engineering, architecture or is DevOps engineering you can take more advantage of your Linux terminal. So I won't share more useful tools I'm using every day with you guys. The terminal is much more productive than using a mouse, for instance, that's most of the people know, however not everybody know all the good and awesome terminal apps that are out there so sharing is caring. Let's get started!

Engineering requires more Science

Image
Peter Drucker once said, "Culture eats strategy for breackfast". Technology is a very awkward field. In theory, we came from Math, science thinking should be our default mindset but we are far from it. We need science more than ever, as a society we are living a pandemic crisis, for sure will lead to some sorta ice age economical period who not only is never saw at this scale but also nobody can tell for sure what will happen. So yes, we need science because of the need for a COVID-19 vaccine and cure but we also need that in Software Engineering and Digital products. For some reason we are losing the basics, we are losing how to build software properly. Mostly because people don't understand how technology should work. Deming, one of the founding fathers of Lean once said Second-grade teacher creates second-grade students.  Crises times are often tough and difficult but for sure there are opportunities not only to improve things but also to re-think what we are doing

Result & Pattern Matcher in Rust

Image
It's common in the software language community to worry about the "idiomatic" way of doing this. So what's the idiomatic or rust way to do things. It's easy to learn new languages and continue with old mindsets coming from C or Java for instance.  IMHO Readability, High Cohesion, Loosely coupling, Debugability, Good Design are super important aspects in regards to you are idiomatic or not. But being idiomatic is like following a standard and makes things easier for all engineers. For this blog post, I want to share a video I recorded on using 2 resources in Rust called Pattern Matcher and Result. These mechanisms are not unique to Rust, actually, they are functional programming concepts.  The result is also known as a Monad and you can find it in Haskel, Java, Scala,  and several other languages, with different names like Either, Maybe, Option, Optional and so on and on.  Pattern matcher is also found in lots of languages like Haskell and Scala.

Lessons Learned with Remote Work

Image
Remote work was kind of the default for me. I'm a Gypsy, always traveling, 6 months home in Brazil, 6 months in Europe / USA. Doing that for +10 years makes me feel remote native :-). Even in Brazil, I travel a lot to Santa Catarina and S ao Paulo states. I go to standard office 1-2 times per week maximum. So remote was a default for me a long time. Now we are facing dangerous and different times because of the COVID-19 .  So remote becomes the default for everybody. Remote work has several advantages like You dont loose commute time, I used to lose 2h per day in a traffic jam. Also, you can have your meals with your family and you can work with much more comfort and focus. IMHO I always worked much more from HOME rather in the office for basic 3 reasons. First of all, I felt much more obligated to produce more results since I was working from home. Second I have much fewer interruptions in HOME than in a formal office. Unfortunately, there are tons of people who do not know h

Agile value delivery with Outcomes

Image
Agile is +20 years old. Most of the companies did not get it. I'm glad to see the several new UX movements are getting it and are producing some amazing books, not limited to UX but in the helm of digital products and discovery like: Sense & Respond , Outcomes Over Output , The Hard Things about Hard Things  and Traction . I read all these books and really recommend you read it too. So the big fight that agile started and Digital Products / Discovery carry on is, stop focusing in Features make sure you understand your customer and deliver real value. Deliver value is not easy and still something everybody talks but feel know how to do it. The difference between a successful startup and a failed one is the ability to execute well knowing their customer and making products they love. I made some previous posts in regards to other forms of value I recommend you check it out here and here . In order to deliver the value, we need to focus on outcomes and stop focusing on output

Borrowing and Ownership in Rust

Image
Rust is a pretty interesting language. I said that not because of unique performance but also because it makes you think differently. Languages that make you think differently are great even if you dont use them in production. Rust is quite unique because it does not have Runtime like Java and neither a traditional Garbage collection. Rust managed to be efficient thanks to its's smart compiler and some new rules like Borrowing and Ownership. So I recorded a quick video to explain how Borrow and Ownership work in practices. I hope you like and have fun learning Rust.  Let's get started!

Running Istio 1.5 on Minikube

Image
Istio 1.5 is out. Istio took a very bald and big move. Istio decided to move away from microservices. Considering istio use case it makes lots of sense. As you go with microservice architecture you have several advantages like autonomy, use the best tool for the job(different languages), scale components independently, isolation and many others. However, microservices are not a free lunch and there is a downside from it. One of them is the DevOps engineering price to configure, provision, monitor and maintain several isolated services. The other one is complexity. Microservices are more complex than monolith systems. Istio took the move and went to from the microservices architecture with 5 services(Pilot, Cidatel, Telemetry, Policy, Galley, Injector) into 1 single service called istiod. This move made lots of sense.  Not only because it removed complexity but also make configuration, installation and upgrade much easier. I',m sure this move will drive more adoption.

Running a rich Microservice constellation in Kubernetes

Image
Languages have trade-offs like any solution in tech. Microservices are great for many reasons, one of them allows the best tool for the job. Kubernetes allows us to have the same operational standards and procedures even using different languages and solutions. For this blog post, I want to show a simple project I build which is a constellation of services. There are 5 microservices, written in several languages like Scala, Java, Go, Python and Rust. The services do a pretty basic math operation like (+, - , / , *) and the Scala one does the aggregation and orchestrate the other services using a polish notation algorithm and REST calls.

Infrastructure testing for Terraform with Clarity

Image
DevOps Engineering is a reality. DevOps principles like Immutable Infrastructure, Infrastructure as Code, GitOps and Observability are the default building principles for any cloud computing serious initiative. However, Infrastructure, provisioning, automation it's not trivial, tools like Ansible and Terraform make the engineer's life easier, productivity and fun. As time goes by we have more and more infrastructure code, how we make sure we keep software rolling faster with stability and quality?  The answer is testing.  Infrastructure testing is a very tricky, mocking terraform it's not easy. There are some interesting solutions like LocalStack ,  TestContainers , and molecule for Ansible . These tools are great but they are more towards Integration or E2E testing with are expensive, involve several other components and often super slow to run. A simple approach more towards unit testing could be achieved using Clarity .