Using Code With Me to Collaborate on Getting to Know IntelliJ IDEA

As I’m sure you remember, back in March 2020 the office dwellers were sent home indefinitely. I recall my colleagues expressing opinions from “this is silly and will only last a week” to “this marks the point the world changes forever”; those in the latter group were much closer to reality. I was on holiday at the time so when I returned, I duly drove into the office, loaded everything from my desk into my car and settled into working on the dining room table – sound familiar?

After a few months of working at the dining room table we too moved from “this is silly” to “the world is changing”. I made space in our tiny box room and tried to make a workspace that was conducive to productivity. Another few months passed and a series of fortunate conversations led to me interviewing at JetBrains for a Java Developer Advocate. They hired me (yay!) and I started my new job in July 2020. That was it, I was one of them, I was remote, but I wasn’t alone.  

JetBrains Code With Me entered the Early Access Program (EAP) a couple of months later. I didn’t realise at the time just how central Code With Me would be in my life in the next two years. As Trisha mentions in this blog post, our book Getting to Know IntelliJ IDEA was born at the same time. Given that we were both Java Developer Advocates at JetBrains at the time (Trisha has since left) and working in different countries, we took the most obvious route for book collaboration – Code With Me!

For those of you who don’t know what Code With Me is, the tl;dr is a collaborative programming service. Code With Me allows you to invite others to join you in your IDE, even if they don’t have IntelliJ IDEA installed. Many of you will be familiar with pair programming and you’ve likely done a bit of it in your time. Swarm programming is similar just taking the number of participants to a bigger number than the 1-1 mapping you get in pairing.

Of course with Trisha and myself, we were a pair so no swarming was required. The most common pairing model is where one person navigates and another person drives, but I am getting ahead of myself; back to Code With Me!

The product was in its infancy back then but I’m going to describe the modern-day experience! Let’s start at the beginning, you need the Navigation Bar on to access Code With Me. By the way I’m using the new UI in IntelliJ IDEA because I prefer it. If you haven’t enabled it yet you can do so in IntelliJ IDEA 2022.3 by going to your Settings/Preferences and then searching for “new UI” and enabling it. You’ll need to restart your IDE but then you’ll go from this:

Old Navigation Bar in IntelliJ IDEA

… to this! 

New Navigation Bar in IntelliJ IDEA

However, whatever UI you’re using, the most important icon for today is the Code With Me one:

Code With Me Icon

When you click this, you have three options. We will come back to Start Session in a moment. Permissions allows you to change the permissions that a new session starts with and gives you a finer level of control over what those joining your IDE session can, and of course, can’t do. 

Join Session allows you to join another IDE Code With Me session from your full IDE. It’s worth mentioning again that you don’t need to use your IDE to join someone else’s CWM session, but the option is there.

Back to Start Session, this does exactly what you’d expect. It allows you to initiate a new Code With Me Session, tweak the permissions you want to assign those connecting to your IDE and creates a custom link that you can share with people you want to invite to collaborate. The permissions are grouped into Read-only, Edit Files, Full Access and Custom. For each of these levels you can further define them at a lower level if you want to. For example, I can select Edit Files but then also give them access to run and debug functionality, whereas this is disabled by default with the Edit Files permission set.

Once you’ve settled on the permissions, you can click Start Session. IntelliJ IDEA will copy the link to your clipboard and you can share it with others. Here it is in action:

Once you’ve sent the link over to the people you want to join your session via Slack, JetBrains Space, MS Teams, Twist, Whatsapp, Signal, Telegram or Apple iMessage (did I get them all?) they can paste that link into their browser of choice to initiate the connection The recipient’s machine does not need to have the IDE installed, the guest’s JetBrains client connects to the host’s machine and you’ll be able to work inside their IntelliJ IDEA within the constraints of the permissions the host granted you when they created the Code With Me session.

Trisha and I used Code With Me extensively throughout the creation of our book, Getting to Know IntelliJ IDEA. We loved the fact that you get code completion and the IntelliJ IDEA experience even without the full IDE. We also used the call feature extensively; be aware that Code With Me will mute your audio and turn off your video when anyone else joins the Code With Me session so don’t forget to renable them!

We naturally fell into the pattern of me being the driver and Trisha being the navigator. That meant that I, as the driver would fire up a Code With Me session and send the link over to Trisha, the navigator. However, because we were using Code With Me we weren’t constrainted to this model, we frequently reversed it and I did more talking while Trisha did the editing.

Here you can see the guest on the left and the host on the right-hand side:

Once you’re done collaborating, it’s worth knowing that changes from different authors go into different changelists. This is by design so you can see who has changed what, however, you must remember to drag changes from the contributors into one single changelist if you want to commit them all; IntelliJ IDEA does not allow you to commit multiple changelists (rightly)!

Finally you must close your Code With Me session when you’re finished collaborating. You can do that from the same Code With Me icon and then click End Session, otherwise your friend might come along and leave comments in your code that you weren’t expecting!

Trisha and I covered Code With Me along with lots of other features of IntelliJ IDEA in our book which you can buy directly from Leanpub

Getting to Know IntelliJ IDEA book cover

Getting to Know IntelliJ IDEA Book Launch!

On November 6th 2022, Trisha and I launched our book, Getting to Know IntelliJ IDEA. It’s taken us over two years to write, and it contains a wealth of information; in fact, it contains everything you need to get started using IntelliJ IDEA. We wrote the book because the tools we use matter, and being able to use them effectively improves our productivity and happiness. 

What’s in the book?

The book is over 350 tightly packed A4/US letter-sized pages. The eBook page count, of course, is much larger, at just under 1000 pages… That’s because there are plenty of:

…. annotated screenshots

Annotated screenshot from the book Getting to Know IntelliJ IDEA

… guided tutorials

Tutorial excerpt from the book Getting to Know IntelliJ IDEA

… helpful use cases

Helpful information from the book Getting to Know IntelliJ IDEA

… chapter introductions

Chapter introduction from the book Getting to Know IntelliJ IDEA

… chapter summaries

Bottom Line from the book Getting to Know IntelliJ IDEA

… and that’s before we get started on the Trisha Tips

Trisha Tip from the book Getting to Know IntelliJ IDEA

… and Helen Hints:

Helen Hint from the book Getting to Know IntelliJ IDEA

… plus much more!

How is the book structured?

The book is split into four parts, each of which has a different goal so that you can either read the book front to back, which I recommend if you’re new to IntelliJ IDEA, or you can dip in and out as you need to which more experienced users may want to do.

Part I lays the foundations of what IntelliJ IDEA is, what the key elements of the interface are, and how you can get the most from them. It also introduces the three guiding principles for IntelliJ IDEA:

  • Always Green – IntelliJ IDEA strives to keep your code compiling by flagging errors as they happen and assisting with keeping it syntactically correct.
  • Keyboard First – Using IntelliJ IDEA’s keyboard shortcuts speeds you up in your day-to-day tasks. You probably won’t learn them all, but learning the ones you use helps keep you focused.
  • In the Flow – We all know the feeling when you’re happily coding and don’t want distractions; we have provided lots of tips and tricks to help you stay in this zone while using IntelliJ IDEA.

Part II builds on the foundations laid in Part I for writing and reading code, which is a huge part of our daily jobs. It introduces some key features that help do the heavy lifting in IntelliJ IDEA so you can focus on doing what you do best – figuring out solutions to problems! There are many opportunities for you to try stuff out with the code snippets we have provided, which are all available on GitHub.

Part III takes it to the next level and uses guided tutorials to show you how to open, run, test, and debug real applications. These tutorials get you up and running quickly and introduce you to IntelliJ IDEA’s features so you can explore them at your own pace. Part III also discusses working with dependencies, build tools and version control; central components for real-world applications.

Part IV is where the book pivots to specific functionality you can use in your day-to-day workflow. This is where you can discover areas of IntelliJ IDEA that you might not be familiar with. We’ve included many features that can support you and introduced the “Frequently Asked Questions” element to answer your questions. The Table of Contents gives you clues as to what’s in here!

Header 1 Header 2 Header 3
IntelliJ IDEA essentials

Fixing errors and warnings

Refactoring your code

Formatting and rearranging your code Benefiting from multiple clipboards Using Run configurations effectively
Diving into debugging Expanding on testing Building on build tools
Doing more with dependencies Making version control work for you Viewing and applying local history
Running commands in the terminal Managing work todos Pairing with code with me
Working with plugins Understanding Java in IntelliJ IDEA Looking in your .idea folder
Changing IntelliJ IDEA settings What to do when things go wrong  

Where do I find out more?

You can check out Getting to Know IntelliJ IDEA today and learn how to get the most from your IDE!

Header 1    


Ch-ch-ch-ch-changes (in the workplace)

Humans are not known for being amazing at managing change; at least, there’s definitely been plenty of times where I’ve not been amazing at it. I’m guessing if you’re reading this blog post then perhaps change is something that you’ve often pondered as well. We often cope with disruptive or stressful changes in our life with coping mechanisms but they are rarely early. I call them just-in-time coping mechanisms because we don’t usually know how we will react to a change before it happens, even if we can see it coming. It might be a so-called positive change, but those changes are still very capable of causing stress.

I gave this talk a little while back on this subject and this blog post is the summary in case, like me, reading is more your thing. I looked at the challenge of personal change management from two angles, firstly for leaders who are instigating a change and secondly for those who are impacted by a change. I predominantly focused on workplace changes but you can extrapolate many of these ideas to personal changes as well.

Do’s for leaders of a change

Let’s say you’re the one driving the change. Perhaps you’re leading a change to the processes your team use for code reviews, or perhaps you’re leading the whole team. If that sounds familiar, here are my top tips:

  • Be transparent; share as much as you can and share it in a timely fashion. Of course, as a leader, there may be some pieces of knowledge that you can’t share but the vast majority of the time it’s much better to be open and transparent with what you know (and what you don’t know).
  • Include people; share your leadership vision and why. If people know why you’re changing something, they are far more likely to not only help with the change but have a better experience throughout its life cycle.
  • Lift others up; be aware of whatever privilege you have and help others achieve their goals.
  • Give people choice; change is disruptive, maybe this change isn’t for everyone, always give and respect the choices people make.
  • Celebrate people; even those that leave your team; in fact especially those that leave your team! People leaving is not always a sign of a “bad manager” that’s a sweeping generalisation in my experience. Remember that person will still be talking about you and the company they left years after the event – make sure their memories are positive ones.
  • Plan people’s first day and onboarding meticulously; set people up for success. You’ve invested a lot of time and effort in them to get them to this point so set them up for success at each step of the way. First appearances really do matter. Give them a warm welcome.

Photo by Vlad Bagacian on Unsplash

Do’s for those impacted by a change

All of us will find ourselves in this group sooner or later, change is, after all, inevitable. If you’re impacted by a change, irrespective of if you saw that change coming, consider the following tips:

  • Find out more; get in front of it, especially if you didn’t see it coming. It’s vital that you inform yourself and get as much information as you can so you can make decisions as required.
  • Consider if you should cut your losses and move on; sometimes it’s just not worth it. If you’re not sure if it’s for you, give yourself a timescale in which to decide and give some thought as to what you need to find out before you can make an informed decision.
  • Give yourself time and space to the change; remember coping mechanisms are just in time and many things are improved with a good night’s sleep.
  • Don’t be afraid; you got this!

Photo by Sammie Chaffin on Unsplash


Finally, here are a few points to remember about change:

  • Change is scary; informing yourself and giving yourself a timescale to respond to that change can help reduce the scariness level.
  • Change is inevitable; you will always be impacted by a change, and sometimes you will be the one driving the change. Try and enjoy it, or even thrive on it.
  • Change can lead to opportunities; sometimes staying put and accepting the change is in your best interests, sometimes it’s not.
  • You control more than you think you do; really you do!

Photo by Miguel Bruna on Unsplash

Five cool features in IntelliJ IDEA

Here are my top five cool features in IntelliJ IDEA. There are of course more than five, but that wouldn’t make a catchy blog title!

  • Management of JDKs
  • Code completion
  • On-demand error highlighting
  • Customization
  • Tight integration

#1 – Management of JDKs

IntelliJ IDEA does a fantastic job of managing your JDKs. You can download new JDKs and configure existing JDKs on your machine with IntelliJ IDEA. I created a tip for this on the IntelliJ IDEA Guide but the short version is – go to your Project Structure with ⌘; (macOS), or Ctrl+Alt+Shift+S (Windows/Linux), to view your Project Structure.

The SDK drop-down shows you all the JDKs that are configured for use with IntelliJ IDEA (assuming you’re using a Java project), then there is an option to Add SDK and finally, IntelliJ IDEA shows you a list of detected SDKs:

The top list outlined in orange is all the JDKs that I’ve configured for use with IntelliJ IDEA. The bottom list outlined in green is the detected SDK – that is all those on your machine that you’ve downloaded but are not yet being used by IntelliJ IDEA. The middle option, Add SDK, outlined in purple is where you can download a new JDK from different vendors to your machine by selecting Download JDK. You can also select JDK to browse to a JDK on your machine that exists but IntelliJ IDEA hasn’t detected. You can also download IntelliJ Platform Plugin SDKs and Android SDKs here.

When you select Download JDK you can choose your version and vendor and IntelliJ IDEA will download your chosen JDK and configure it with use with IntelliJ IDEA.

#2 – Code Completion

IntelliJ IDEA takes code completion to the next level. There’s Basic Completion, Advanced Completion, Live Templates, Postfix Completion, Statement Completion and more.

Here’s a whirlwind tour for you! Basic completion usually is available by default, but you can also invoke it with ⌃␣ (macOS), or Ctrl+Space (Windows/Linux). Smart completion or type-matching completion is similar to basic completion, but it only shows options for the current context. You can invoke smart completion with ⌃⇧␣ (macOS), or Ctrl+Shift+Space (Windows/Linux).

Live Templates are also a form of code completion that allow you to use abbreviations such as main that IntelliJ IDEA will convert to Java’s main method. There are dozens of live templates, and you can create your own!

Postfix completion is similar to live templates in some respects in that it also uses abbreviations but it helps you avoid backward caret jumps as you craft the code. It also allows you to manipulate existing code as you add the dot and then the abbreviation for the postfix completion you want to use, for example ifn for if null.

Finally, statement completion is one of my favourites because it adds the correct parentheses, braces, and semicolons to my code! The shortcut is ⇧⌘⏎ (macOS), Ctrl+Shift+Enter (Windows/Linux). This is just one you need to try out, granted three key presses is more than one semi-colon but it’s very helpful because it reduces errors in my code. I also find I can quickly use ⇧⏎ (macOS), or Shift+Enter (Windows/Linux) to create a new line – it’s just a syntactically pleasing combination!

#3 – On-Demand Error Highlighting

You can write code and see error highlighting in real-time in IntelliJ IDEA, no more waiting for the compiler; if your code isn’t going to compile, IntelliJ IDEA will tell you about it straight away. I prefer to fix errors as they happen, usually with Quick Intentions which is ⌥⏎ (macOS), Alt+Enter (Windows/Linux). IntelliJ IDEA helpfully gives you a little red light-bulb when there’s an error with your code:


Alternatively, you can use F2 to navigate to each error in your Project or use the Problems tool window which is ⌘6 (macOS), or Alt+6 (Windows/Linux) to get an overview of any problems across your project.

If you search the IntelliJ IDEA tip page for “quick intentions” it will give you a flavour of some of the ways it can help.

#4 – Customisation

I would be remiss if I didn’t mention how much I love being able to customise IntelliJ IDEA. Fortunately, it comes packed with sensible default options but equally allows you to customise these over time as you get more familiar with the product. Of course, I don’t use 95% of the customisations but the point is that I can and many people in the community do. That said, the 5% I do use makes my authoring experience a more enjoyable and productive one. The best way to get an idea of what IntelliJ IDEA is capable of in the customisation department is to go to your Settings/Preferences with ⌘, (macOS), or Ctrl+Alt+S (Windows/Linux). You can then browse and view the groupings on the left such as Appearance & Behavior and Editor. My favourites customisation are:

#5 – Tight Integration

I couldn’t come up with a better name for this one, but fundamentally it’s the integration part of the IDE. It’s easy to take this part for granted because IntelliJ IDEA makes it look easy, however integration with tools such as Git, Maven, Gradle, Docker and more in both IntelliJ IDEA Community Edition and IntelliJ IDEA Ultimate.

Having a one-stop shop for all your coding needs really is a productivity boost, plus there’s no more faffing about configuring external tools to work with your coding tool because it’s all neatly integrated!

The Great Resignation – So good I did it twice

Three months ago I left JetBrains because I took an opportunity at MongoDB as a Keynote Storyteller. Today I am returning to JetBrains as a Java Developer Advocate.

But that’s what a probation period is for, right? It’s a chance for the company to check out if you’re a good fit for them and more importantly, for you to check out if they’re a good fit for you. The probation period is a chance to test theories, form hypotheses and have new experiences.

In the last few weeks, while in my probation period at MongoDB, I realised two things. Firstly that it wasn’t a good fit for me, and secondly that I missed the work I was doing at JetBrains and the people I was doing that work with. Plus, life is short; we all have to find our own way.

I consider myself very fortunate, and I’m grateful to my colleagues for welcoming me back to a role where I know I can add value and work with the diverse and talented Java community once again.

I’m looking forward to continuing work on the IntelliJ IDEA Guide, creating videos for our YouTube channel, as well as getting to know the amazing Java community better. Trisha Gee and I are also busy on our book Getting to Know IntelliJ IDEA! I’ll share more updates once I’m re-settled and up to speed!

Let’s do this!

Small plant growing in someone's hands

It’s not just me, is it?

The 35 Stages of Creating a Conference Talk

You may well have heard of the five stages of grief, well in this blog post we’re going to cover the 5 stages of creating a conference talk. And then 30 more.

Before these five stages comes a crucial first step. It’s the one where you see a conference CFP, and you’re already at least 1.5 gin & tonics in because it’s 7 pm on a Saturday (or Tuesday, whatever). Before you know what has happened, you’ve come up with a suitably smart-sounding talk title and abstract, and you’ve submitted it grinning to yourself at your play on words. Then you get on with your evening and forget about it. You forget about it until, with a bit of luck, you get an email six weeks later that says something like, “Congratulations! Your talk has been accepted at <insert conference name here>.”

You cast your mind back to that Saturday night, but your memory is hazy. Still, it seems like a good idea, all you have to do is write the talk; the idea was the hard part! So you graciously accept the invite because it’s eight weeks away and then… read on.

Actual timelines may vary – not to be used as a project management tool unless you’re me.

Stage one – Denial

T-8 weeks, I bury my head in the sand and pretend that I didn’t just say yes to a conference that’s in eight weeks for a talk that I haven’t yet written.

Stage two – Anger

T-7 weeks, I start asking myself questions such as:

  • Why did I say yes to this? What was I thinking?!
  • This is stupid; I don’t want to do this/I can’t do this!
  • I’m never submitting to a CFP again, ever.

Stage three – Bargaining

T-6 weeks, I wonder what the impact would be on my sanity and brand might be if I email the conference and say something like:

I’m sorry I can no longer make the conference because <insert suitable excuse here that clearly isn’t even true>

Don’t do this. It’s okay to think it though!

Stage four – Depression

T-5 weeks, I can’t lie, it’s not right. I have backed myself into a corner and now I have to write this (stupid) talk.

Stage five – Acceptance

T-4 weeks, FINE I’ll write the talk! This is usually when I start writing the talk itself rather than just putting notes together. However, there’s more to acceptance than meets the eye. For me this step can be broken down into 30 separate steps (yes, 30)!

  1. Write content
  2. Decide content is crap
  3. Write different content
  4. Realise initial content wasn’t that crap
  5. Tweak content
  6. Decide whole talk is crap
  7. Briefly revisit stage three
  8. Force self to write more talk
  9. Decide whole talk is crap
  10. Give talk to brick wall
  11. Consider talk might not be crap
  12. Rework talk
  13. Decide whole talk is crap
  14. Give talk to friendly face
  15. Accept whole talk isn’t crap, mostly
  16. Incorporate feedback
  17. Realise talk doesn’t match the brief you submitted
  18. Decide brief was crap, revisit stage two
  19. Overhaul talk and make it pretty
  20. Give talk to more friendly faces
  21. Incorporate feedback
  22. Practice talk
  23. Practice talk
  24. Practice talk
  25. Practice talk
  26. Practice talk
  27. Practice talk
  28. Give talk
  29. Decide whole talk wasn’t crap
  30. Vow never to do this again, until the next time

It’s not just me, is it? Hope to see you there!


mongod, mongo, mongosh, mongos, what now?

As you might know, I joined MongoDB last month as a Keynote Storyteller, and, as you might expect, in order to work on the keynotes it’s important that I understand the world of MongoDB to the best of my ability.

As I progressed through my technical onboarding, I became aware that I was following some instructions without really understanding why. There is always a time and a place for this approach but this wasn’t it. In particular, I realised I didn’t exactly know when I would write these to my terminal:

  • mongod
  • mongo
  • mongosh
  • mongos

Yes, I know there are many more like mongodump, snigger, but I want to focus on these four first because they are the ones that I found myself using the most in my technical onboarding.

What is MongoDB?

This is as good a place to start as any. If I ask you what is MongoDB you’ll probably say “It’s a Database, Helen!” And you’d be right, but this is an excellent time for me to point out that it’s So Much More than just a database.

This is a good time to introduce MongoDB Atlas into the equation. MongoDB Atlas is a MongoDB database as a service and it has a ton of cool services that you can check out at your own pace with a free tier.

I’m starting here because the rest of this post makes references to MongoDB terminology. You will need a MongoDB cluster which itself is made up of multiple database servers of which one will be primary and the rest secondary (replicas). This means that if your primary server is unavailable/unreachable, your data can still be accessed. Your cluster also has clients that can connect to it and manipulate your data. Now, down to business.


No, mongod is not some kind of database deity. In fact, it’s usually pronounced mongo-dee and it’s the MongoDB daemon, also known as the server for MongoDB. If you don’t start your server you have no cluster and then, well, you got nothing. You run mongod to start your server.

The MongoDB server listens for connections from clients on port 27017, and stores data in the /data/db directory when you use mongod. However, you can start your MongoDB server with different parameters if required:

mongod -–port 12345 --dbpath /srv/mongodb/

That said, MongoDB Atlas runs mongod for you, so you don’t need to run the server yourself. It’s just useful to know from an architectural perspective at this stage especially as it might pop up in training.

The MongoDB daemon process that you start with mongod (or that MongoDB Atlas starts for you) manages your data access and any requests you might make such as add this, query that, or change that.

Documentation and helpful links:

mongo and mongosh

So what is mongo? It’s the shell, it’s the client, it’s a javascript interface that you can use to interact with the MongoDB server (mongod). For example:

mongo --host

However, as of June 2020, it was superseded by the new Mongo Shell, called, wait for it, mongosh! Bold for emphasis, it genuinely took me more than a few seconds to realise why it was called mongosh – you’re welcome. mongosh has improved syntax highlighting, command history and logging in case you were wondering! For example:

mongosh --host

When should you use mongo or mongosh? If you are able, you should run mongosh when you want to interact or change the data. Of course, if you prefer you can still use mongo but you won’t get the new features introduced in the newer MongoDB shell (mongosh). Don’t forget that the shell, whichever you use, is just a way to communicate with your database cluster.

Documentation and helpful links:


So that’s the daemon, or server, for MongoDB covered and two client options, that just leaves mongos for this blog post. This does not spin up multiple MongoDB clients, sadly. It’s just a proxy that sits between the client application (mongo/mongosh) and a sharded database cluster, that is multiple mongod replica sets.

It’s what your clients (mongo or mongosh) interact with when you run queries against sharded data. It does not replace your database server, it is in addition to. You need to point it at your replica sets, for example:

mongos --configdb cfg/

Now your first question should be why do I even need a proxy between my client and server just because my data is sharded? That is an excellent question! You need mongos to route the queries and any write operations to the shard(s) as required.

The mongos proxy is a map that your client can use to query or make changes in your cluster when your data is sharded. This in-between proxy is required because your cluster doesn’t know which shard(s) that data exists on, but the mongos proxy does. It also knows which shard to insert data into, if that’s your requirement.

Documentation and helpful links:

Putting it all together

This blog post has been a deliberately simplistic viewpoint to illustrate the components, however, I like to know what’s going on beneath various abstractions which is why I wrote it. That said, do remember that MongoDB Atlas manages this for you!

In summary, from the CLI, run mongod to start your MongoDB server for your cluster in a training environment. Note that in the real world (which again MongoDB Atlas manages for you), you would need to run at least three mongod instances. You should never run just one in a production environment. You can then use either the legacy mongo or the newer mongosh shell commands to interact with your cluster.

If your data is sharded you will need to additionally run at least one mongos process to ensure that your queries are routed to the right shard(s). Again I’m talking about a training environment here rather than a production environment!

I got one of the real MongoDB developer advocates (thanks Mark) to help me draw a diagram for you:

Diagram of the commands as architecture

Finally, for those of you wondering where you can get your hands on some MongoDB training, go check out MongoDB Basics and see where your learning journey takes you.

And that is mongod, mongo, mongosh, and mongos!


2021 All Wrapped Up

Well, here we are again. 2021 is almost over, and as usual, I have no idea where it went. I know I’ve worked hard and achieved a lot, but time seems to go very fast lately.

I read a lot of books

First up, books! I got through a fair number of books in 2021. Here’s the list, along with why you should read them too.

  • The Timeless Way of Building was arguably one of my favourite books this year. It was one of those books that managed to take my gut feeling about several “house-y things” and tell me why I felt the way I did. This book is for you, even if you’re not particularly interested in architecture. It might ignite a passion in you, as it did me, and give you a whole new way of viewing your house and home.
  • Predictably Irrational is the perfect book if you’re looking for an insight into your brain. You might not like what you find out, however. It’s changed how I view my behaviours, and I’d like to think it made me more self-aware. Then again.
  • A Mind of its Own is a fascinating read about our self-delusions. It’s not entirely comfortable, especially when you realise you’ve been kidding yourself all these years (and probably will continue to do so).
  • Yes please was a delightful read. I often think it’s easy to look at famous people and miss all the hard work that went in before seeing them on stage/tv. This book is brutally honest and open; it made me laugh and cry in the same sitting.
  • Woman & Power is for you if you’ve ever wondered (and frankly you should) about the roots of misogyny; this book is a must-read. It’s enlightening and depressing all in one. Read this book, then ask yourself how much longer must we wait?
  • Show Your Work is about learning to step out from the shadows. Also, since we’re here, please remember that good work does not speak for itself. You’ve been lied to. This book is an excellent read for everyone who wants to show their work professionally or personally.
  • Everybody Writes was such a good book. We’re not born good at writing, but we can learn and improve. So read this book if you do any writing and embrace TUFD (The Ugly First Draft)!
  • Thinking in Systems: A Primer was a book that I didn’t have any expectations of. I’ve found it quite hard going at times, but it will completely change and re-frame how you look at the world. I have a much better understanding of why things happen now and perhaps the smallest of grasps on the systems around me and their impact. This book will reframe your view of the world and add a lot of understanding to the systems you interact with.
  • Easy Peasy Puppy Squeezy is my current read. Of course, this means that soon we will become puppy parents. This book is doing an excellent job of training me to look after the family addition. I’m pretty sure it’s going to eat my shoes, books, post and anything else I accidentally leave at its height. Of course, it’s all going to be my fault when it does because they are “legal chew toys”!

I moved house

A lot has changed since we bought our old house back in 2014. We have both changed jobs and moved to remote working in part due to the type of job and in part due to the pandemic. We embarked on the journey of moving house in September 2020, had an offer accepted on our old house in November 2020 and moved in our new house in March 2021. It was four months of packing, stress, anxiety and then happiness. I don’t intend to repeat it any time soon, but I have no regrets about doing it. If you also moved house in the pandemic, remote high-five coming your way! One day I’ll manage to finish unpacking, today is not that day, tomorrow doesn’t look good either.

I changed jobs

2021 was a year of change! After almost 18 months at JetBrains, I accepted a role at MongoDB as a Keynote Storyteller. I’ve been there three weeks now, and it’s been a whirlwind already! I spent my first week in New York, which was awesome because I met my new team members in person, something that isn’t a given with remote working. Covid-19 brand Omicron has since ramped up, so I’m very grateful to be home now with good memories and lots to do!

Of course, this also meant that I got on a long haul flight for the first time in over two years. That part was stressful; the outbound and inbound requirements and resulting paperwork for Covid-19 took time and effort, probably because I checked it at least 8 times both ways.

Related to this, I also managed to move beyond the free tier for my Amazon S3 bucket of blog post images. This means that there was a lot of traffic to my site. Four thousand of you in fact came to check out my blog post for my last day at JetBrains. Can I get a hug, please?

I migrated my website

I’ve been procrastinating about this since February 2020. My site was hosted on SquareSpace and I was quite convinced that I didn’t know enough front-end web development to move it to WordPress, despite also recognising that I wanted it on WordPress because it’s a lot more configurable and cheaper. I was also struggling with my blogs as I tend to write them in markdown in IntelliJ IDEA and SquareSpace is not great at supporting markdown. So this festive holiday I decided to just bite the bullet and get on with it. After 2 days and only one exceptionally large gin when I misconfigured something and lost a bunch of stuff (no I didn’t have a backup and yes I should have had a backup) – welcome to my new WordPress site! I still need to untangle my blog post categories and tags, perhaps I’ll do that now. Also, it’s amazing the lengths I will go to to avoid writing my new talk. 

I’m co-authoring two books

I can finally announce that I’m working on a book with Trisha Gee called Getting To Know IntelliJ IDEA! I’m going to put this blog post down in a bit and work on it some more. It’s an absolute pleasure to work alongside Trisha and continue to advocate for users with the product. I still love working with IntelliJ IDEA even though I no longer work at JetBrains; there are not many products I can say that about!

But wait, there’s more! I can also share because it’s now public that I’m working with Daniel Terhorst-North on his book Software Faster. Daniel has a wonderful way of looking at life and the challenges throughout it. I’m honoured to be a part of this project and learn from Daniel. The book list above includes recommendations from Daniel too.


In summary, it’s been a year of change and growth. It’s been jam-packed, which is how I like it. As I look to 2022, I’m excited about contributing to MongoDB World 2022, book prospects, and continuing to share what I hope will be great content with the community. In addition, I’m building out a new talk that I’m excited about! I should probably apologise now for the shameless use of David Bowie lyrics. Right, time to chill a bottle of bubbly for the New Year!

It’s My Last Day at JetBrains

I’m leaving my role as a Java Developer Advocate at JetBrains today, Friday 3rd December 2021. I start my next adventure soon, but before I do, I want to recognise those I’ve worked with as well as my achievements!

My Team

First and most importantly, my team. Trisha Gee leads the team and is my sponsor, mentor and friend. I have learned an incredible amount from her, including being kinder to myself and how to prioritise my efforts. Trisha also steered me towards public speaking and has been my biggest cheerleader in that department. Working alongside Trisha has been an incredible opportunity and privilege that I’ll cherish forever.

I can remember being incredibly excited when I first met Mala Gupta. I was totally in awe of her, and I still am. Mala embraced what I brought to the table; the skills and the fears. Mala challenged me on several occasions in the kindest way possible. I’m forever thankful to her for that. It’s because of what Mala has taught me and the feedback she’s given me that I push myself even further out of my comfort zone, repeatedly!

Dalia Abo Sheasha helped me to recognise that it wasn’t just me who struggled with code at times – everyone does. She also taught me how to walk away and come back to something troubling me, something I have often struggled with. Dalia always treated me as her equal on the Java front, despite my lack of real-world experience. She always let me find my own way when we were solving a problem and patiently listened to all my thoughts. Dalia is the reason I’m more confident writing code than I’ve ever been.


The Java community have been incredibly helpful and supportive throughout my time at JetBrains. If you’ve read any of my blogs, watched any of my videos or tuned in to a live stream – thank you!

To those of you who collaborated with me on projects, are lurking in my Twitter inbox, sent me some messages of support and encouragement, gave me a platform, supported me through a new process, offered me opportunities, chatted with me in any number of Slack organisations(!), or connected me with even more amazing people – thank you!


I’ve done a lot at JetBrains; here’s a whirlwind tour! Of course, I can’t list everything, but I’ve hand-picked my favourite highlights from my time at JetBrains.

  • Straight after I started in August-September I wrote ten blogs for the JetBrains Technology day for Java.

JetBrains Technology Day for Java

foojay Multiple Carets Blog

  • December is not only Christmas, but I also crafted this 3 Ways to Refactor Your Code in IntelliJ IDEA, one of my favourite blogs. December also was home to this screencast on the New Project Wizard in IntelliJ IDEA – my top-performing video!
  • Phew, here comes January! I stepped back from the public content creation and focussed on creating content for the IntelliJ Guide. I also started drafting my new talk Writing Code is Easy, Being a Great Developer is Hard.
  • In February, we held our IntelliJ IDEA Conference to celebrate IntelliJ IDEA turning 20!

IntelliJ IDEA Guide

JLove Conference

  • July was home to was more talk preparation and conference efforts, including being part of the program committee for Devoxx UK.
  • As I look at August I’m reminded that for the past year I’ve produced the vast majority of the tip tweets you see on the IntelliJ IDEA Twitter handle – that’s me!
  • In September, I hosted one of our Coffee Club episodes – Staying Ahead of the Curve and I started crafting what has become Helen’s Take On videos.
  • I’m not sure what happened in October, but mostly it was more video recording and conferences!
  • I spoke at Devoxx UK in early November.

Devoxx UK Conference

And since then, I’ve been wrapping up my time at JetBrains, culminating in the blog post that you’re now reading!


I’m very fond of the 16 months I spent at JetBrains, and I’m honoured to have worked with some of the smartest people I know. Beyond my immediate team, I got to work in the broader team full of talented developer advocates who never hesitated to help me or answer my endless questions.

To name check but a few… Marco – thank you for all the Spring and Spring Boot help, I learned so much from you. Paul – thank you for listening to me as I brought the IntelliJ IDEA Guide to life, I could not have done it without you (and I’m sorry for beating on Gatsby so much). Maarten for bailing me out of my Git holes on more than one occasion and generally being an all round sane voice! Rachel for teaching me some fundamentals that had totally passed me by and also for being a lovely friendly person to chat to right from the start. Nafiul for teaching me more about audio than I thought there was to know and demoing it. Shengyou for helping me to understand our broader audiences and for working so tirelessly on translations. Khalid for helping me on my website and co-authoring a blog with me. Matt for being my buddy in the UK when a rant was required about something country-specific! Yann for helping me to understand aspects of the plugin ecosystem. And finally, Hadi, firstly because he’ll be upset if I don’t mention him, but more importantly, for being super supportive at all times. I haven’t name-checked everyone (sorry), but in summary, you’re all awesome and I’ve loved working with you!

It’s been a really enjoyable time, and as I move on to my next adventure, I have great memories of this role and for all those I interacted with directly and indirectly.

Three Ingredients for Great Content

Creating content can be a daunting prospect. It might be a blog post, a video, a talk, a presentation or something like a Twitter thread. However, I’ve found that considering just three things can help to crystallise your ideas and help make your content amazing.

  • Your Experience 🎓

  • Your Audience 👥

  • Your Goal 🥅

Let me explain.

Photo by Artem Maltsev on Unsplash

Photo by Artem Maltsev on Unsplash

Your Experience 🎓

Often people are reluctant to create content, citing something like it’s all been done before. No, it hasn’t; no one has created the content you want to create with your experience, knowledge, and approach. Besides, even if they have, it needs saying again, because no one was listening. Your experience is unique. No one else has it, and that is why your content needs to be created.

The other statement that I hear a lot is I don’t know enough about it to create content on it. It’s as though we get to a certain point in our learning and then conveniently forget that we were all beginners at some point. We then extrapolate this and decide that creating content with our limited knowledge isn’t worthwhile because everyone knows more than us. How crazy is that? Everyone is on a journey of learning and exploration; that’s life.

So it hasn’t all been done before, and content of all experience levels is helpful and valuable. When you create content, think about your experience (not your lack of). Here are some questions you can consider for your experience:

  • What resources did you use when you learned the thing? Sharing resources you found useful will help others.
  • What did you struggle with? Sharing your struggles is very helpful as many other learners will also struggle with the same thing you did.
  • What was unique about your experience? We all have different learning experiences. Sharing your specific hints and tips is really useful for other learners.

Your Audience 👥

Your audience are the people that will benefit from consuming the content that you’re going to create. It’s especially important to consider them if they are a group of people who are paying for your content (such as a conference). Consider their needs and requirements, but not to the detriment of your skills and experience. What I mean by that is don’t try and create content on something you’re not knowledgeable or comfortable with just because that’s what the audience wants. That’s not your audience! In addition, if you create content for an audience that is too far from your knowledge and experience, you risk not being authentic, which will hinder you on your content creation journey.

Remember that your audience are just like you. They have learning goals and aspirations, and they want to learn too. That’s why they are consuming your content. So here are some questions you can consider for your audience:

  • What are the learning goals and experiences of your audience?
  • What will help the audience to achieve their goals with your content?
  • What can you share with the audience by way of signposts for additional learning?

Your Goal 🥅

The goal for your content is arguably the most simple of the three parts of my content framework, but it’s also the one that you probably will have to remind yourself of the most. What is the goal of the content you want to create? Here are some questions to ask yourself:

  • What do you want your audience to take away from consuming your content?
  • What kind of platform is most helpful for your content goal? A blog post, a video, a talk, a Twitter thread?
  • Is this content part of a bigger story you want to tell over time, and thus you have many smaller goals? If so, how will you represent that through content signposts?

So, Why Not You?

Each time you create content, consider your experience, the goals of your audience, and the goal of your content. Go ahead and create awesome content! Here are some resources for content creation that I’ve enjoyed and learned from: