P

Phil Calçado

philcalcado.com · Personal blog · on HN since 2011

Phil Calçado, a software engineer, writes about microservices, service mesh, Back-End for Front-End, and engineering process.

What HN saysHN commenters cite his microservices history as candid, link his service mesh pattern and DigitalOcean departure posts, and discuss BFF-style specialized backends.
35HN people shared it
9linked it in comments
40stories submitted
1.7Kstory points
6 months agolast shared
2011people per year2026

Most-shared posts

  1. 1
    How we ended up with microservices
    6 people · 490 points · first shared 2015 · 90 comments on HN
  2. 2
    Some Thoughts on GraphQL vs. BFF
    6 people · 13 points · first shared 2019 · discussion on HN
  3. 3
    The Back-End for Front-End Pattern (BFF)
    6 people · 11 points · first shared 2017 · discussion on HN
  4. 4
    A Structured RFC Process
    4 people · 7 points · first shared 2019 · discussion on HN
  5. 5
    Pattern: Service Mesh
    3 people · 75 points · first shared 2017 · 4 comments on HN
  6. 6
    Building AI Products–Part I: Back-End Architecture
    2 people · 166 points · first shared 2024 · 21 comments on HN
  7. 7
    Using Pseudo-URIs with Microservices
    2 people · 62 points · first shared 2017 · 21 comments on HN
  8. 8
    Phil Calçado's Microservices Prerequisites
    2 people · 12 points · first shared 2017 · discussion on HN
  9. 9
    Attention Is All a Manager Needs
    2 people · 4 points · first shared 2023 · discussion on HN
  10. 10
    Thoughts on TDD with Clojure
    2 people · 3 points · first shared 2011 · discussion on HN
  11. 11
    Takeaways from looking for a new senior role in tech
    1 people · 431 points · first shared 2021 · 355 comments on HN
  12. 12
    On asking job candidates to code
    1 people · 361 points · first shared 2016 · 508 comments on HN
  13. 13
    On joining DigitalOcean
    1 people · 28 points · first shared 2016 · 1 comments on HN
  14. 14
    Read The Dinossaurs
    1 people · 25 points · first shared 2011 · 1 comments on HN
  15. 15
    Any Colour Will Do
    1 people · 21 points · first shared 2014 · 3 comments on HN

What HN people wrote when they linked it

vyrotek · 2020-06-30
Agreed! A SPA using an RPC API usually makes the most sense. I've wasted so much time over my career trying to jam functional concepts into REST resources for little gain. I really like the idea of each app getting it's own specialized backend. Have you heard of the BFF pattern? https://philcalcado.com/2019/07/12/some_thoughts_graphql_bff.html
dlojudice · 2018-12-13
jeffbr13 · 2016-02-11
At my company we have a bunch of content that's only archived on SoundCloud. The main barrier I've had to backing up original uploads (only available through the web interface) is the terrible reliability of all the AJAX calls. Even with browser automation, it requires a LOT of error-handling just to navigate between resources successfully. It seems that all these microservices[1] are there for the sake of blogging about using microservices[2] as there haven't been any new significant new features delivered in years, and the whole application now seems to be delivered through AJAX calls. [1]: https://developers.soundcloud.com/blog/building-products-at-soundcloud… [2]: http://philcalcado.com/2015/09/08/how_we_ended_up_with_microservices.h…
dunkelheit · 2015-10-06
Having read one of the success stories linked in the beginning (http://philcalcado.com/2015/09/08/how_we_ended_up_with_microservices.h… I think I am starting to get it. That was a rather candid article describing a team which after having got burned by a sprawling "monorail" architecture decided to split it up into services (nothing micro- there) based on organizational viewpoint (if there is some knowledge about a part of application shared by 3-4 engineers it makes sense to split it into a separate module so it can be developed faster). And as I am inferring from the pictures their services don't call each other much so it is really close to a modular monolith. So if "migrating to microservices architecture" really means "splitting that damned monorail into something more manageable" then it is a really good idea after some point.
DanBC · 2015-09-16
Perhaps this? http://philcalcado.com/2015/09/08/how_we_ended_up_with_microservices.h… (That question mark is part of the URL)
diurnalist · 2025-01-28
The article imo misuses the term BFF a bit, but perhaps its meaning has evolved over time. I was at SoundCloud when BFF was being introduced as an important piece of the microservice architecture--this post explains the purpose well[0]. BFFs can enable you to build more general-purpose and domain-specific services with few assumptions as to how they are used and their callers. BFFs then provide a composition layer you can use to, e.g., call one service to get a list of tracks, then call an authorization service w/ the list of track IDs to get geo-specific distribution rules for them, and compose that together in one materialized presentation view for the clients of the BFF. Eventually I think there was some work to move to GraphQL, which can solve some of the same problems. But GraphQL is a technology, and BFF is more of a pattern. There is a later reflection on that blog that makes this distinction, which I only read today.[1] It makes another observation that I kind of forgot about, because it was hiding right in front of my face as a worker there: "The defining characteristic of a BFF is that the API used by a client application is part of said application, owned by the same team that owns it, and it is not meant to be used by any other applications or clients." The ownership model is indeed a big deal. In practice, it helped in many ways to have a sort of intermediate layer between the client applications and the rest of the architecture. For example, in the…
cessor · 2015-02-02
The author suggests a common opinion on patterns, that I have seen violated a billion times: > Two people with a common set of patterns find it easier to communicate [...] than those without one. > [...] writing down our shared context lowers the barrier to entry. In my experience this is often not the case. Patterns come along with labels and the labels will be put everywhere in a codebase. Assumptions get made and replace discussions, leading to a diluted codebase. For example Repositories will become synonyms for "thing that does database access", and will then be reduced to stupid GetByID wrappers [1]. Even worse, some patterns make entry really hard. I used to work with C# and ASP.NET MVC. There, a view is the thing that contains markup, the thing controlling the input is the controller. Then I started using Flask and was utterly confused, since there the functions with the @app.route decorators, which are run on the server and then return markup rendered via jinja2 templates, are called view functions. In Django this is understanding is the same. I was really baffeled. I could not reapply my understanding of the patterns across these domains. This is just one explicit example that I wrote about in my blog [2], but I really made the general experience that patterns replace or inhibit discussions, rather than improving communication and understanding. [1] http://philcalcado.com/2010/12/23/how-to-write-a-repository/ [2] http://www.cessor.de/on-patterns
jgrodziski · 2017-10-17
Identifying changing "stuff" in the real world is for me a fundamental topic of any serious data modeling for any kind of software (be it an API, a traditional database stuff, etc). Identity is also at the center of the entity concept of Domain-Driven Design (see the seminal book of Eric Evans on that: https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Softwa… I started changing my way of looking at identity by reading the rationale of clojure (https://clojure.org/about/state#_working_models_and_identity) -> "Identities are mental tools we use to superimpose continuity on a world which is constantly, functionally, creating new values of itself." The timeless book "Data and reality" is also priceless: https://www.amazon.com/Data-Reality-Perspective-Perceiving-Information… More specifically concerning the article, I do agree with the point of view of the author distinguishing access by identifier and hierarchical compound name better represented as a search. On the id stuff, I find the amazon approach of using URN (in summary: a namespaced identifier) very appealing: http://philcalcado.com/2017/03/22/pattern_using_seudo-uris_with_micros… And of course, performance matters concerning IDs and UUID: https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2a… Happy data modeling :) EDIT: - add an excerpt from the clojure rationale

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close