• Home
  • Curriculum
  • Blog
  • Patterns
  • @joaorcabrita on Twitter
  • LinkedIn® profile
  • Designing using Options

    written by João Cabrita on 23 July 2022

    One of my favorite software development activities is designing: thinking of how to create components so they work together really gets me going. Today, I wanted to write a bit on the way I consider trade-offs in designs. In particular, I focus a lot on options.

    • design
    • architecture
  • Thoughts on REST style APIs

    written by João Cabrita on 08 December 2021

    I’ve worked with RESTful APIs for much of my career; besides being pretty much unavoidable anyway, they’ve always had a warm place in my heart and I’m very interested in learning more about how to design them.

    • REST
  • Ok, we’re doing iterations: are we agile now?

    written by João Cabrita on 12 July 2017

    Despite their usefulness, teams sometimes use iterations incorrectly, decreasing their effectiveness. Here I describe a couple of patterns in which I’ve seen poor use of iterations.

  • The role of Media Types in REST

    written by João Cabrita on 10 December 2016

    REST (Representational State Transfer) is an architectural style that I’ve grown very interested in over the years and try to use when developing webservices. What I like about REST is that, having been “reverse-engineered” from the Web architecture, it provides a guide on how to develop webs of services in an organic (meaning somewhat unplanned and low-friction) manner, as opposed to trying to design and control a large scale system’s evolution.

    • REST
  • Thoughts on Hypermedia

    written by João Cabrita on 08 October 2016

    One of the services maintained by my team on my current project exposes a RESTish API and a pub-sub mechanism for receiving notifications when a resource is modified. The service was originally created for a single consuming service, also under my team’s responsibility, but is expected to be consumed by new services in the not so distant future. This has caused some concern for me because, having been developed in parallel with the consuming service by the same team, the service is a poster-child for Conway’s Law:

    • REST
  • CompletionStage and CompletableFuture tutorial

    written by João Cabrita on 11 June 2016

    Just FYI, I’ve started working on (yet another) tutorial on Java’s CompletionStage and CompletableFuture, check it out!.

  • On Privacy

    written by João Cabrita on 23 April 2016

    I’m currently reading Bruce Schneier’s book Data and Goliath, on which he argues that technology advances of recent years have sprouted unprecedented surveillance by both corporations and government and that these developments are highly detrimental to individual privacy.

  • Property-based testing

    written by João Cabrita on 08 December 2015

    Property-based testing is a technique I’ve started using a couple of years ago, which is essentially a way of asserting a certain property of a piece of code that holds for a whole category of inputs. This is opposed to example based testing, which uses a finite and fixed set of data points.

  • When to do method call verification

    written by João Cabrita on 12 November 2015

    Ironically, a few days after my post explaining why you shouldn’t write tests based on method call verification, I ended up finding a case where it’s not only useful but also the Right Thing To Do™.

    • testing
  • Reducing tests based on method call verification

    written by João Cabrita on 01 November 2015

    Out of today’s programming practices, testing is probably one of the few that is widely accepted. However, in my opinion, test code tends to be written with less care and, as a consequence, to rot much more quickly than application code. Something I see much more commonly than I would like to is method call verification in tests. Using Mockito in Java it looks like this:

    • testing
  • Workshop material, Continuous Delivery style

    written by João Cabrita on 14 September 2015

    These past couple of weeks, I’ve been preparing a workshop comprising a slide deck and some practice material. I have done this before but, this time, I also had to select and prepare the development environment for the trainees. Being the CD (Continuous Delivery) fanatic that I am, I started looking around for options for:

    • continuous delivery
  • About Software Engineering

    written by João Cabrita on 05 September 2015

    Every once in a while, I try to take a step back and analyze my profession, software engineering. I’ve been doing this over the last few weeks, the result of which is a three component model of software engineering.

  • Baseball

    written by João Cabrita on 13 April 2015

    We’re engineers but sometimes it feels as if we’re baseball players: we don’t really hit home runs often, and when we do, we come up with weird reasons for why it happened.

  • Book Review: Continuous Delivery

    written by João Cabrita on 25 September 2014

    In case you’ve been hiding under a rock for the past few years, Continuous Delivery is the practice of making software releasable at all times. It is the practice that allows companies like Facebook, Google and Amazon to release software often (many times per day or even hour or minute!) in a safe manner, which helps them keep ahead of their game.

  • Why I'm giving up Haskell

    written by João Cabrita on 24 September 2014

    Over the last two years, I’ve been learning Haskell as my first functional language. Now, and despite my love for the language, I’m putting it on hold.

  • Sharing resources with Jenkins

    written by João Cabrita on 21 September 2014

    I’ve recently been asked to design a system for managing the installation of a set of plugins in a server-side third-party application. The fundamental problem is simple: from a bunch of files in version control, I have to create and copy a bunch of files into a directory. The source files can potentially be edited by several people at the same time but any version control software should be able to handle it. It seems like a simple development scenario.

  • Kaizen

    written by João Cabrita on 20 September 2014

    Kaizen is a synonym for continuous improvement. Although in Japanese (the word’s origin) it simply means improvement (according to Wikipedia, at least), it has grown into an expression meaning the never-ending search for perfection, for continually becoming just a little bit better.

  • Yup, ads

    written by João Cabrita on 18 September 2014

    As you may have noticed, I now have ads on my website.

  • Not Invented Here

    written by João Cabrita on 08 September 2014

    Not Invented Here (NIH) is a well-known expression for software developers and describes a general attitude which favors developing software in-house, rather than reusing or adapting existing tools. Today, I’ll try to list some pros and cons of this attitude, based on my opinions and experience so far.

  • Fragmented Team

    written by João Cabrita on 31 August 2014

    It’s a well accepted fact that teamwork usually produces better outcomes than a single individual’s work. It’s easy to see why:

  • What is your core business?

    written by João Cabrita on 17 December 2013

    What exactly is your company’s core business? While I certainly can’t answer that question for you, I’ve come across the mindset that a certain business is not part of the company’s core. As an example, someone might say that a restaurant is in the food business and that real estate is not a core part of the business.

  • Business Process Rot

    written by João Cabrita on 12 November 2013

    As a developer, I’m very familiar with the concept of code rot. It’s a principle that draws a parallel with rotting food, which illustrates that code which is not maintained gradually falls into a state of decay and is rendered useless.

  • The Framework

    written by João Cabrita on 19 October 2013

    Today, I’m writing about what I consider to be a common anti-pattern in the enterprise development world, which is The Framework™. Simply put, this pattern manifests itself as the existence of a company standard, internally developed framework or set of components which everyone must use.

  • The end of construction

    written by João Cabrita on 12 August 2013

    One of the things that I enjoy the most in C++ (one of the few enjoyable things about it, really) is RAII. For those who don’t know, RAII (Resource Acquisition Is Initialization) is a pattern which uses object constructors and destructors to acquire and release resources. This, along with C++’s automatic management of stack allocated variables, allows one to reap the benefits of the language’s high performance and deterministic behavior while avoiding the classical C error of forgetting to free a dynamically allocated variable.

  • Suddenly, Iterable

    written by João Cabrita on 11 August 2013

    I’ve had my first experience with Google Guava (the Java library) on the project I’m currently on. The library is a special kind of useful in that, instead of providing some really new features to Java, it is mostly a collection of utilities which fill some gaps in the language’s current API.

  • Programming is actually a lot of fun

    written by João Cabrita on 07 July 2013

    During my vacations last month (which is part of the reason for not posting in a long time), I went to lunch with some friends of mine. During lunch, I told them that I’d probably be spending most of my time relaxing, reading and programming. They commented that I should get out more and not always be programming.

  • Continuing Android Development

    written by João Cabrita on 02 June 2013

    Today I finally completed my first minimally complete Android app! It is a white noise machine.

  • Software engineering

    written by João Cabrita on 26 May 2013

    I’ve had some doubts about my field of software engineering over the last few weeks, almost to the point where I had trouble working on anything. It started with some articles I read online about differences in programming languages which had really strong opinions on which languages were really bad. I thought about this for a while, then realized that this can be generalized to most activities related to software development, from design to implementation. It came as a hard wake up call: you have this idea that what you’re doing is scientific but then you realize that you’re unable to objectively justify your decisions.

  • Starting Android development

    written by João Cabrita on 20 May 2013

    Ever since I got my first smartphone (which, by the way, is a Samsung Galaxy S which I still use), I’ve wanted to try my hand at doing some development on it and although I have some app ideas from time to time, I never really got into the mindset to really do it. Until now, as I have been spending some time in the last few days to learn about Android app development.

  • Tests don't make you agile, they keep you agile

    written by João Cabrita on 24 April 2013

    Since I follow many programming blogs, I stumble on the subject of testing from time to time. And by testing, I mean automated testing. It’s not that I look down on manual testing but automated testing is the focus of this blog post. I think I’ve heard all kinds of opinions, from “testing won’t help you if you develop with care” to “testing is better than the wheel, fire and electricity combined”.

  • Hello world!

    written by João Cabrita on 29 March 2013

    Hi!


Who dares, wins.