Philip Potter

  • Dad Weeknotes, volume 4

    Posted on 04 February 2018

    Slightly late, here are my notes from my fourth week of dadding. You may also want to see volumes 1, 2 and 3.

    New recipes

    I tried two new big-batch recipes, both of which Luke loved: lamb stew with root vegetables, and tuna pasta bake. The pasta bake did the whole family for three separate meals, and the lamb stew made 6 2-portion boxes for the fridge and freezer. I think both will become regular additions to the repertoire!

    Nursery

    I spent a lot of time at nursery this week! I took him in for an hour on Monday and Wednesday mornings, to get him more familiar with the staff, the routine, and the environment. Then Thursday was the big test: having had a bad time last Friday when we left him alone, we wanted to do everything to help him settle without his mum or dad there. We brought his pram to sleep in as something more familiar than the nursery mattresses, and we also brought his plushy duck comforter. And fortuitously, one of his NCT buddies started nursery that day too. The effort spent familiarizing him with the place seemed to pay off, and he managed 9.30am til 12 noon without too much drama. They both seem to have helped him settle in too.

    However, he was a very hungry boy on Thursday afternoon – eating a bigger afternoon snack than usual, and also eating a big dinner. At nursery he had had a “large”-sized lunch; I wonder if that’s still not as big as what he’s used to at home?

    I also learned my lesson from last week, and arranged to do something to keep myself busy rather than having nothing to do but worry about Luke. I went to meet an old friend for coffee and a catch up. She politely tolerated me showing her about 80 photos of Luke, for which I am most grateful. It was also comforting to know that our NCT friends were there for their own baby’s first day.

    On Friday, we tried 9am til 2pm. I dropped him off, and again went somewhere nearby and kept busy. He again did well, but he was incredibly tired when we picked him up. He had had 2 naps at nursery, but he had a third nap that afternoon – something unheard of for him! Having him so tired made the rest of the afternoon much harder work, but I still think it’s a good sign that he’s using up all this energy at nursery.

    Next week, I’m planning to take Luke in on the off days again (Monday to Wednesday) and hopefully he’ll stay a little bit longer on Thursday and Friday once more.

    Other stuff

    I’m struggling to find things to write about. The week has flown by, and although I tried to keep notes as it went, I just don’t feel like there’s much of note. There was plenty more routine housework: washing, washing up, that kind of thing. I took Luke to the Tuesday health visitor baby clinic to get some advice on some nappy rash. They also weighed him (he’s 11.10 kg, which is around the 90th centile). I found some time to do some filing, and noticed that our fixed-price gas & electric deal has expired, so it’s time to do some shopping around for that again. On Wednesday Sonia looked after Luke for the afternoon, and so of course I had a raging migraine all afternoon. We managed to do some sociable stuff. Sonia and I managed to go to our respective orchestra rehearsals on Tuesday and Thursday, we hosted Sonia’s book club on Monday, I managed to buy some climbing shoes at get back on the wall for the first time since 2016.

    I’m keeping busy, I suppose?

  • Dad Weeknotes, volume 3

    Posted on 27 January 2018

    This is my third week of dadding. You may also want to see volume 1 and volume 2.

    Nursery

    Thursday was Luke’s first day at nursery. Sonia and I went with him and stayed in the class for the morning, then took him home. Luke is in the baby room, which is ages from 6 months to 2 years. The day has a structure to it: at 9.30am is “circle time” where they sit in a circle and have songs. They then go and wash their hands (the littler ones are helped with this) and sit at tables to have milk and fruit. Then there is some outdoor free play time.

    Luke did really well – he seemed happier eating at nursery than he had been at breakfast at home! However the nursery schedule doesn’t align well with his existing schedule and before long he was very tired. We put him in the pram to sleep and took him home again, 45 minutes earlier than planned.

    On Friday, I took him in again (Sonia had work commitments so couldn’t join us), but this time I left him there. He seemed to sit down for circle time well. I went to a nearby café in case there were any problems and they tried to call. We had arranged for me to pick him up again at 12 noon.

    As soon as I left him, I felt really odd. I didn’t want to walk too far away in case I was needed, but I also knew I wasn’t likely to actually be called on. I still had the feeling of needing to look after Luke and having to think about him and his needs, but I had literally nothing to do. As a result, I kept thinking through whether I had done everything right this morning. Did I bring everything he needed? I had brought his shoes, but I didn’t tell the nursery staff where I’d put them. Would they find them? Would he end up playing outside in his stocking feet? Was that a problem?

    After half an hour nursing a coffee in the café and trying to read my book, I admitted there was nothing to do so I went back home. Sonia was still busy with work calls. So I sat on the sofa and tried to distract myself from the ongoing emotional wrench.

    Sonia finished her call about 11am, and came through to give me a hug. Having her there was a huge relief.

    She wanted to get some exercise, so we arranged that she would go and pick Luke up while I prepared lunch. On her way to the nursery, the staff called her! It turns out Luke had had a tough morning and they wanted to let her know. He had done well at circle time but he was confused by the transitions between different activities. He got tired but managed to sleep in his pram a little. But at lunchtime he was too upset to be able to eat anything.

    Luke is only booked in to nursery two days a week at the moment, but it’s possible to take him in on other days if we stay with him. We will probably do this next week to help him get more used to the environment and the timetable of activities.

    Luke’s affect

    Luke has started to get angry and upset quite quickly if he can’t do things. For example, the oven door handle is at a great height for him to reach and pull himself up, but we’d quite like him not to play with the oven door. Previously, I could just pick him up and move him somewhere else, and he’d be happy; this week, however, he has found things like this much more upsetting.

    He has also been variable at mealtimes: sometimes he will eat as normal, sometimes he won’t eat food he would usually wolf down. We were particularly surprised one morning when he wouldn’t swallow his raspberries – normally a favourite.

    We have developed a number of hypotheses about what could be causing this: is it just a new stage of development? Is he slightly ill, or teething? (He has also been sleeping more than usual, which is consistent with this.) Was the nursery visit a traumatic experience for him, which is still affecting him?

    Right now, we think it’s most likely that he’s slightly ill, but we will keep an eye on it. We can always take him to the weekly health visitor clinic on Tuesday if we’re still concerned.

    Washing-up gloves

    Being a man, and an above-average-sized man at that, normal washing-up gloves don’t fit me. When I put my hand on the Marigold width guide, it covers the whole thing up, suggesting that I wouldn’t even squeeze into the largest size available.

    Until now, I had just accepted this and washed up bare-handed. That’s fine when you’re doing it once a day, but when you’re washing up 3 or 4 times a day, it really affects your skin. I found the knuckles on my right hand getting drier and drier, and cracking painfully, and the cracks not healing. I realised this was not a sustainable situation so I set out to find some gloves which do fit me.

    It turns out that while Marigold don’t do an XL size, some other brands do. And it also turns out there’s such a thing as moisturizing gloves!

    So, for the moment I’m using Lakeland Deluxe Moisturizing Gloves in Large size. Large is tolerable for me, but I’m going to try XL as well to see if it’s a better fit. The cracking on my knuckles has healed up well now, and washing up is much less painful.

    Visit from Grandma

    My mum had a flying visit this week. She lives in Glasgow but often has meetings in London, and she usually stays with us when she does. She came on Tuesday evening, and left Wednesday morning at 11am. It was great to see her.

    We weren’t sure if Luke would remember her. He last saw her a month previously, which is a tenth of his whole life so far. But when she came in the front door, Luke immediately had big smiles for his grandma. They had a lot of fun together, reading stories and playing with his walking trolley.

    I took advantage of this to do something I had been trying to get done for days: wash my hair and have a shave!

    Having a child has definitely changed my relationship with my mum. It’s a joy to see her be so proud of Luke. She really enjoys her role as grandma, and Luke brings out the best in her (as he does with all his grandparents). I also seek her support much more than I used to, and she has a lot of support to offer.

    Argh I don’t know how to end this

    I’m still working out the format. Will this do?

  • Dad Weeknotes, volume 2

    Posted on 20 January 2018

    It’s volume two of my much-celebrated dad weeknotes!

    Baby health

    We’re trying out SMA Wysoy, a soya-based infant formula. As previously mentioned, Luke has a non-IgE cow’s milk protein allergy. He is still breastfed, but there are times when breastmilk is impractical or inconvenient (for example, Sonia has work trips roughly once a month). We have previously tried expressing and storing milk, with some success but with issues I won’t go into here. We have also tried extensively hydrolysed formulas – these use cow’s milk but hydrolyse the protein until it is no longer a trigger for the allergy. However they taste disgusting and Luke could not get used to the flavour.

    As a result, we’re trying the soya formula, so that Luke has something for nursery and for when Sonia is away.

    Nursery

    We had our preparatory home visit from our nursery key worker. She will be assigned to Luke, so when he starts nursery this coming Thursday she will be there to welcome him. Of course, Luke slept through the whole home visit so they didn’t actually get to meet each other.

    There was a lot of paperwork. It was a pretty badly-designed form: it asked for lots of information multiple times but in different ways, it had inconsistent style (sometimes you sign then print your name, sometimes you print then sign).

    Mental health

    This has been a tough week for my mental health. I have suffered from depression in the past, and this week I felt some of those same feelings returning. Being primary carer for a baby, it’s easy to get overwhelmed. Also, being naturally perfectionist, it’s easy to be hard on myself when there isn’t time or energy to achieve the high standards I set myself.

    What was good was that my wife and I both recognised it instantly and were able to talk about it straight away. We talked about feelings, but just as importantly we talked about beliefs – often, bad feelings arise due to incorrect beliefs. Often I don’t even realise I have these beliefs but they are there, causing trouble. Especially beliefs that start with the works “I should”: “I should always know why Luke is crying”, “I should always have home-cooked food prepared for Luke rather than rely on a ready-made pouch”, “I should be better at this than I am”. When my behaviour doesn’t live up to my beliefs, it’s easy to examine my behaviour, but it’s just as important to examine the beliefs.

    Food and cooking

    I’ve been trying to develop a repertoire of meals that meet certain criteria:

    • low effort-per-portion
    • storable and reheatable
    • good for Luke to feed himself
    • good balance of nutrients
    • dairy-free
    • flexible scheduling (ie, can you easily pause the cooking halfway through, or do some steps the night before?)

    In the past, we have done big batches of soup, which could easily tick all of these criteria. However, Luke is getting more and more keen to feed himself rather than be spoonfed. This week I tried to find some recipes which Luke could eat with his hands. Here are some of the things I tried:

    Multicolour casserole

    This was from a toddler recipe book. It’s basically garden peas, sweetcorn and diced red pepper, simmered in vegetable stock for a few minutes. It’s good finger food in that it gets Luke to practice picking up small objects.

    However, as a whole meal, it turned out to be too much sustained effort for Luke, and he got very upset before he had eaten half his portion. In following meals, we gave him small amounts of the casserole alongside a less demanding main course. By the time we got to the bottom of the batch, we were blending it with a hand blender to make it easier for Luke to eat.

    Dairy-free fish pie

    We bodged together this recipe from bits and pieces on the internet. In short:

    • put the potatoes on to boil
    • fry some onions and leeks
    • add koko coconut milk to the pan, and poach the fish in it
    • carefully remove the fish from the pan, and strain the poaching liquid into a jug
    • make parsley sauce from a roux, the poaching liquid, and lots of chopped parsley
    • mash the potatoes and mix in some margarine
    • layer the fish, parsley sauce and mash in a rectangular dish
    • oven for 30 minutes

    This felt like a huge amount of effort, even if we got 7 portions out of it. On the plus side, it’s quite easy to do every step before the oven, and put it in the fridge to store until it’s needed. That means you can cook in the evening, when you have time, for lunch the next day, when you don’t.

    Luke loved the fish pie. It’s got big enough chunks of fish that he can eat them on their own with his hands, and the mash and parsley sauce combine to make clumpy balls which he can also feed himself.

    Roast chicken

    In principle a roast isn’t a lot of effort: take chicken, put in oven, wait. Makes several portions.

    It’s the stuff around it that makes a roast take a lot of effort. We had it with roast potatoes, red cabbage with apple, and gravy. I probably made a mistake doing a red-cabbage-and-apple side dish – that could have just been simply broccoli or peas.

    Luke enjoyed the chicken but, with only four teeth still, it’s still a bit much for him to chew up strips of the stuff. He absolutely loves roast potatoes though, we can’t feed him enough of them. Although I thought I had cooked the red cabbage until soft, it was still a bit tricky for Luke to chew properly.

    I simmered the carcass for stock afterward, and hopefully we’ll get a good batch of chicken soup out of it.

    Summary of the week

    Sometimes it feels like taking over primary responsibility as a parent is like trying to jump on to a moving vehicle: Sonia can support me and explain to me things as they are, but Luke is developing and changing constantly, so what worked last week may not work any more. I’m having to play catch-up at the same time as anticipating Luke’s future development.

  • Dad Weeknotes, volume 1

    Posted on 13 January 2018

    Last year I became a dad for the first time. A number of people I follow write weeknotes logging their work, and as my work is currently full-time dadding and people often ask me what it’s like, I thought I’d write some of it down. This is only half a week’s worth, but as it’s my first one it’s rather long anyway.

    Context

    This is, by some definitions, my first week as sole full-time parent of a baby. My wife, Sonia, and I took advantage of Shared Parental Leave, so we had the first three months together, then I returned to work for six months, and took another three months starting in December. However Sonia didn’t actually return to work until the start of January. As a result, this week is the first week where I’m truly in sole charge. Luke is now 10 months old, and when he turns a year I will return to work. So I’ve got 2 months of doing this.

    That said, Sonia works from home. During my 6 months back at work, I worked from home 2 days a week and took Luke with me on my morning and afternoon breaks, to give Sonia a rest, and she is more than happy to return the favour.

    Christmas and New year

    Over the festive period, we hired a car for a month and drove all around the country visiting friends and family, with overnight stops in Shropshire, Cumbria, Glasgow, St Andrews, Berwick, and Lichfield (with extra day trips to Dunblane, Dundee, Edinburgh, and Hargrave in Northamptonshire). This was perhaps a slightly mad thing to do with a 9-month-old, but it turns out that hosts (and, especially, grandparents) will do a lot to accommodate tired and bedraggled parents and energetic babies.

    Health

    Luke is a healthy baby and is growing fast: he’s around the 90th percentile for both length and weight. (This means that of a typical sample of 100 babies, Luke would be longer and heavier than 90 of them, and lighter and shorter than 10 of them).

    Luke does, however, have a cow’s milk protein allergy. His is the delayed or non-IgE form, which is not life-threatening, but it means he can’t have any dairy products in his diet, and this includes most standard infant formula. Conveniently, BBC radio’s Inside Health covered cow’s milk protein allergy this week (section starts from 07:20 in the programme).

    The new routine

    A question I sometimes get asked is “what do you do all day?” Here are some of the regular tasks:

    Washing

    On average, we do at least one load of washing a day, sometimes two. At this time of year, drying space is at a premium, so I spend a lot of time worrying about this, and trying to ensure that there’s always something drying.

    Batch cooking

    Luke is on solids (he started at 6 months old) and eats 3 meals a day. That food needs to come from somewhere. It’s just not practical to cook every meal from scratch, so we try to cook big batches of meals (often doubling the listed quantities in the recipe) and split into boxes for the fridge and freezer.

    Along with this is planning and ordering the weekly shop, and making sure we have a good balance of nutrients for baby and ourselves for every meal. With Luke’s milk allergy, we generally try to make dairy-free meals that we can all have, rather than cook separate meals for Luke and for us.

    Washing up

    Feeding a baby results in an enormous amount of washing up. We have a dishwasher, which is a lifesaver, but there’s still a significant amount of stuff we wash by hand.

    Feeding

    Feeding Luke itself is hard work. Mostly we have a dish which we spoon-feed to Luke, with a few finger foods on the side such as quartered grapes, fingers of bread with peanut butter or houmous, sticks of pear or cucumber, etc. We have experimented with baby-led weaning (broadly, letting the baby feed themselves with surprisingly big chunks of food from a surprisingly early age). I find that spoonfeeding is labour-intensive, but gets more food actually inside Luke, and as he’s a big boy he gets very hungry. Letting him feed himself also means that the mealtime itself takes longer.

    Luke has been getting more and more keen on feeding himself independently though, so we may need to adjust our strategy.

    Forward planning

    Babies change so fast, it’s hard to stay one step ahead of them. Luke started crawling a month ago, and shortly afterwards starting pulling himself up on sturdy things to a standing position. He also started pulling not-so-sturdy things on top of himself, so there’s a whole new class of hazards we need to watch out for, and a new round of baby-proofing. There are helpful books and online guides to warn us what is coming next, but it’s not always easy to find time to read them.

    Some of the things we are going to be looking forward to:

    • learning to stand and balance without holding on
    • learning to walk holding one hand
    • learning more syllables (Luke repeats single syllables at the moment such as “ba ba ba”)
    • variegated babbling (ie, mixing syllables together, such as “ka da by ba mi doy doy”)
    • assigning meaning to words
    • learning to drink from an open cup

    Reading

    Luke, like most babies, loves to have stories read to him. Some of his favourites are:

    He’s not just seeing the pictures and hearing the language. He’s also learning to turn the pages himself, and learning to anticipate the next page.

    Physical play

    Since Luke has learned to crawl and to pull himself up to standing recently, he really wants to try it out all the time. He’s crawling all around the house and pulling on anything he can reach. This means he generally needs monitoring to make sure he doesn’t hurt himself or damage anything.

    This is one of the toughest times for me. This is because it’s relatively boring – Luke is mostly directing his own play – so I feel I ought to be thinking about the next thing. I start planning the next meal, or folding some washing, or reading my calendar for the week ahead, and suddenly Luke has started reaching for the DVD player or the TV and I need to intervene.

    Parent and baby groups

    Being in a big city, there are loads of parent-and-baby groups available. These are good for parents to meet one another, to have a reason to get out of the house (which is often an achievement in itself), and for babies to get used to seeing others their own age.

    For a while, I did a dad-and-baby yoga class in Herne Hill which I absolutely loved.

    The week in brief

    With all the context in place, my week might make some kind of sense now.

    Tuesday

    We returned from our christmas & new year road trip. We were exhausted. We put a wash on straight away, and got Luke’s bedtime equipment (including his plushy duckie comforter) unpacked straight away.

    Wednesday

    In the morning, we needed to return the car and take Luke to the dietician. Sonia took the morning off for this to work: I could have taken Luke with me when returning the car, but then I’d need to get Luke and car seat back by public transport which would have been awkward.

    I did one wash on Wednesday.

    Thursday

    I had a grocery delivery arrive before 9am.

    Our NCT group mums had a lunch together. It was good to catch up with them, some of whom I haven’t seen since my first three-month parental leave period.

    Building a support network is important as a parent, to share tips, help each other out, and just provide emotional support. NCT has been a good way of making friends with people in the local area – prior to having a baby, it wasn’t too hard to rely on old friends distributed all across London, but having a baby makes you a lot less mobile.

    It’s worth talking about gender for a minute here. There are two things working against me building my own support network. The first is that men are generally worse at maintaining close friendships, and this gets worse for men in long-term opposite-sex relationships who can tend to outsource relationship maintenance to their partner. This is something I have to be aware of and work on for myself.

    The second is that men are seen by society as having less childcare responsibility - even in situations where they are clearly taking a childcare role. This means men can be overlooked or ignored in situations with parents of babies. See Friday for an example of this below.

    (It may not surprise you to learn that my Christmas reading was How Not To Be a Boy by Robert Webb.)

    I did two washes on Thursday.

    I spent the afternoon making a massive batch of morrocan sweet potato soup, using ingredients from the grocery delivery. I chose the recipe as it has relatively little prep work - peel, chop, roast, blend. It’s also not terribly time-critical: I can be interrupted at almost any point and it’s okay. However, soups are necessarily spoonfeeding food, so I’m going to think about recipes which Luke can feed himself in future.

    Thursday evening was orchestra rehearsal night. My orchestra ends at 10pm which is really late for me nowadays.

    Friday

    We are starting Luke at nursery soon. On Friday we went to a pre-admission session at the nursery. This was mostly going through application forms and policies. Sonia and I went together, and we shared the session with another mother and baby, but I really noticed how the nursery staff talked directly to the mums and not to me. One of the staff even forgot to introduce herself to me and ask me my name, after asking Sonia’s and Luke’s. It’s a small thing, and I didn’t complain, but I definitely noticed it.

    I did one wash on Friday.

    We managed to forget the required documents to give to the nursery so I had to make a return trip in the afternoon. On the way back I gave Luke a go on the swings, which he absolutely loves. His giant smile is so infectious!

    I even managed to escape to go to GOV.UK Infrastructure’s goodbye drinks in the evening. I no longer take nights like this for granted, because someone needs to be in to keep an eye on the baby monitor. That said, it’s important for both Sonia and I to maintain some sort of social life, and so we talk a lot about what we can do to help each other go out in the evenings.

    What is full-time dadding like, then?

    Full-time dadding is hard work of a very particular sort. The main difficulty is that you don’t get to have a break on your own terms: there is often a constant stream of firefighting. Baby is hungry; baby is crawling around and needs watching; baby is threatening to pull furniture onto himself; baby wants a story. It can be difficult to even go to the toilet when you’re on your own with a baby, much less have a shower. One of the NCT mums talked about the multiple full cold cups of tea strewn around her house which she had made and then had no opportunity to drink.

    That said, there are opportunities for breaks. Luke still has a nap in the morning and afternoon for ½–1½ hours (indeed, I’m writing these notes in his morning nap). But time management is important, and in fact some of the tips I picked up in Time Management for System Administrators are proving helpful, because fundamentally I’m responding to interrupts for much of my time.

    There have been a few moments when I have been absolutely despairing and at my wit’s end. In my working life, I almost always have the opportunity of taking 10 minutes to go and have a coffee or a walk to let off steam, but often that’s just not the case with a screaming baby. I’ve had to learn new skills and techniques to manage my own emotional state and the baby’s. Often a walk is a good idea, as putting the baby in the pram or sling is a good way to calm them down when they’re fractious or upset.

    I’m looking forward to writing more about my experiences!

  • Open for extension?

    Posted on 23 September 2014

    Suppose you’re writing Java, but because you don’t like pain all that much you’re using Google’s Guava library to make managing collections easier. You have a class which needs to return a concatenation of two lists, so you use Guava’s Iterables.concat() static method:

    public class CertificateStore {
        private List<Certificate> myCertificates;
        private List<Certificate> partnerCertificates;
    
        public Iterable<Certificate> getCertificates() {
            return Iterables.concat(myCertificates, partnerCertificates);
        }
    }
    

    Now a consumer wants to add these certificates to an existing collection. So they try to use the Collection.addAll() method:

    List<Certificate> certs = new ArrayList<>();
    certs.add(otherCertificate);
    certs.addAll(store.getCertificates()); // ERROR!
    

    The problem is that Collection.addAll() takes a Collection argument, not an Iterable. The frustrating thing is that addAll() isn’t doing anything which requires a Collection instead of an Iterable: it’s just iterating through the elements of the collection, adding each one in turn.

    This is almost certainly because Collection was introduced in Java 1.2, but Iterable was only introduced in 1.5.

    The functionality we want is implementable using only public methods of Collection, so you could write your own static method to do it, as Guava have with Iterables.addAll(Collection,Iterable). Then the consuming code would look like this:

    List<Certificate> certs = new ArrayList<>();
    certs.add(otherCertificate);
    Iterables.addAll(certs,store.getCertificates()); // okay now
    

    This works, but uses a very different syntax. Guava’s extension to Collection just looks different. It’s not a first-class usage of Collection. It’s not obvious at a glance that certs is the thing being modified here.

    What we ended up doing instead was this:

    public class CertificateStore {
        private List<Certificate> myCertificates;
        private List<Certificate> partnerCertificates;
    
        public List<Certificate> getCertificates() {
            return ImmutableList.<Certificate>builder()
                .addAll(myCertificates)
                .addAll(partnerCertificates)
                .build();
        }
    }
    

    By returning a List instead of an Iterable, we could use Collection.addAll() directly, resulting in clean, consistent code for the consumer, at the cost of slightly more verbose (and slightly less efficient) code on the producer side.


    What this example demonstrates is that being open for extension isn’t just about what’s possible. It’s also about making extensions look just like the code they are extending. Users will know the core language features and libraries; code that doesn’t resemble those will add a roadblock to readability.

    The obvious fix to this problem is to allow people to extend classes with their own method, a practice known in the Ruby community as monkey-patching. This is undesirable for a number of reasons: methods are not namespaced, so if two different consumers of a library create a method with the same name, they will conflict; further, monkey-patching often allows access to private internals of a class, which is not what is wanted here.

    Let’s imagine what the example would look like using Clojure’s protocols. Suppose I am using a Collection protocol, with an add function but no addAll function at all:

    (defprotocol Collection
      (add [c item])
      ;;... other methods
      )
    

    Now I want to add all elements from a Java Iterable to my collection. If I wrote the code out in full, it might look like this:

    (def certs (create-list)) ;; implements Collection protocol
    (add certs other-certificate)
    (doseq [cert (seq (get-certificates store))]
      (add certs cert))
    

    If I want to define a function to encapsulate this iteration, it might look like this:

    (defn add-all [coll items]
      (doseq [item (seq items)]
        (add coll item)))
    

    And now, my consuming code looks like this:

    (def certs (create-list))
    (add certs other-certificate)
    (add-all certs (get-certificates store))
    

    There’s no visual difference between the core protocol function add, and my extension function add-all. It’s as if the protocol has gained an extra feature. But because my extension is an ordinary function, it is namespaced. If we add explicit namespaces in, it might look like:

    (ns user (:require [collection.core :as c]
                          [iterable.core :as i]))
    
    (def certs (c/create-list))
    (c/add certs other-certificate)
    (i/add-all certs (get-certificates store))
    

    Namespaces are a honking great idea! And in this case, my extension is namespaced, so even if someone else does the same (or a similar but incompatible) extension, there won’t be a name collision.

    Clojure’s protocols aren’t unique in being open for extension in a transparent way. Haskell’s typeclasses and the Common Lisp Object System (CLOS) both also exhibit this feature. Being open for extension isn’t enough, if your extensions look like warts when placed next to core code. Extensions should be as beautiful as the code they extend.