Reusable Schema Deployments with SQL Source Control

“That’s who you really like. The people you can think out loud in front of.”
John Green

Can we all take a moment to appreciate how awesome Kendra Little is? No really, go on over to her Twitter or something and remind her. Because not only is she a genius but she brings out the best in a lot of folk, and I don’t think she gets enough credit – so my quote above today is for her!

This is one of those times though, where we stumbled on an idea, and together we fleshed it out and thanks to her ingenuity and straight up desire to help we ended up with a full on video about it! Thank you Kendra! So if you don’t want to sit here and read about Reusable Schema Deployments, take a look at the video below instead where we cover everything from the key differences between State and Migrations, what a filter file is and how to use YAML in Azure DevOps!

For those of you who prefer a nice read, grab a coffee or tea and a biscuit (cookie) and read on!

The Problem

We find ourselves in the unenviable situation where we have a Production database that is delivered to customers to support different applications that we provide to them. When a new customer comes on board and chooses any number of our products, we then deliver them along with a copy of the database containing a set of objects that are specific to their setup.

Example. We produce 3 applications for our customers; Beep, Derp and Doink. In the database that we supply with these applications, we have corresponding schemas ‘Beep’, ‘Derp’ and ‘Doink’, as well as ‘dbo’ which holds a number of objects common across all instances of the database.

The question then is: “How do we deploy only the combinations of these schemas to the relevant customers AND make sure there is as little down time as possible?”

I mean, besides magic, of course!

shia labeouf magic GIF

Solution 1: Less Work, More Schema

There’s a reason why, when you buy a new ERP or CRM system for your company, many times you will receive ALL of the schema! Just bought in a new system to help manage your General Ledger, Accounts Payable and Accounts Receivable, and those are the only modules you’re going to use?

Whooooo-boy-howdy you better believe you’re going to get schema objects for Asset Management, Billing and Risk Management too!

The reason for this is that it is much easier to deliver. It is a single package that needs to be deployed everywhere and if the customer already has the relevant objects in the database then it is MUCH easier to just turn on corresponding application functionality that starts to populate and use those objects!

The problem is, if EVERY customer get’s EVERY object change across EVERY schema… well then it’d be a lot of changes and potentially some quite big changes that could impact our customers, perhaps unnecessarily. This could easily be an argument to be made for the migrations approach to source controlling and deploying changes, but that’s one for another day!

Solution 2: You get a filter, and you get a filter, EVERYBODY gets filters!

oprah lol GIF by Amy Poehler's Smart Girls

In the state based way of deploying we can actually use filter files (.scpf) which allow us to filter at the point of creating a database release artifact. This is a game changer because that means we can have the convenience of developing against a single source database in Dev, source controlling ALL object changes together and it’s only once we actually get to the point of deploying to the customer do we include the filter file in the Create Release Artifact step to include ONLY the necessary schema objects that are relevant to them.

Now this is also a great way of doing it because it means that everything in source control is still our single source of truth and we’re able to validate that everything builds together and we can run unit tests broadly against all objects etc. however it does also mean that we have to either maintain separate filter files for every customer, or for every combination of our Schemas that a customer could receive and update them as and when people add or remove certain applications. It also doesn’t give us any validation that THIS particular release artifact that has been created for that customer actually works independently from the rest of the schema objects and therefore we’re deploying something that hasn’t actually been tested in isolation first!

Finally, the secondary problem with this approach is that it is SLOOOOOOW. Like super slow. This is because the heaviest part of the state based database deployment process is the creation of the release artifact determining what changes should be included in the release that is going out of the door and this is being carried out and putting overhead independently on every. single. customer. Not fun.

Solution 3: Reduce, Reuse, Recycle.

If we take a step back from this problem and look at exactly what we’re trying to do and what we want to do. We want to deliver ONLY the necessary changes to a particular schema in the database that supports that specific application.

But this means that there is a commonality across customers – if for example we assume that we have 30 customers that have a variation of the Beep schema (I’m going to ignore dbo for now because everybody has that), they may also have Derp, or Doink or no other schemas, but the point is all 30 of those customers will require the exact same updates to their Beep schema full stop.

This means, if we can generate a single artifact once, that can be used for all 30 customers receiving this schema, or indeed ANY schema, then we can:

a) Reduce the amount of comparisons taking place to create release artifacts
b) Reuse and Recycle the same release artifacts for multiple customers
c) TEST these artifacts before they actually go out the door!

This is effectively achieved by adding an additional layer on top of the development and deployment process:

An additional step is introduced to produce a single reusable artifact prior to the final Prod deployment, Pre-Prod all receives the same package which contains every object regardless of schema, however when a Production release needs to go out the release artifact is built against the Beep database (in this case, which only has the Beep and dbo schemas) so the pain of the creation of the artifact actually sits outside of the customer environment AND is created only once, allowing us to now distribute that change to any customer who many require it to upgrade their Beep schema.

The same is done for each schema in turn which means we then deploy the fast reusable artifacts, and the only process change required is the step immediately before deploying to Production, almost like the independent databases are an exact mirror.

Don’t get me wrong there are challenges with this model as well.

What if we want to deploy a completely new database with a set number of schemas? Well. You may have to do an ad-hoc deployment or add an additional process to the pile which does that create for you!

What if we create versions 10.4.1, 10.4.2 but these only make it up to one of these Pre-Prod mirrors and then we want to push 10.4.3 to Customer Production environments? We will no longer receive the artifacts from .1 and .2, only .3! Here you will have to create the specific filtered artifacts ONLY prior to deploying to Production so that EVERY change is captured. In the video above I used a Golden DB which had every deployment on it and used this to test my schema specific deployments prior to deployment but it depends on what setup you want to adopt.

Conclusion

Filters are incredibly powerful and if you have subtle differences in hosted environments across your customers or even across your own DBs they can be an ingenious way of being able to keep all core objects AND key variations within Dev, version control and Pre-Production but then making sure that the target ONLY receives what it needs.

But be aware, subtle variations can snowball and you do have to be careful how you handle them as it is not very easy to scale to multiple customers. Fortunately in this scenario 1 schema was mapped to 1 application being delivered which makes it easy to determine who gets what, but the more differences you have, the harder they will be to continuously integrate and deliver.

And FINALLY (that’s right I’m going to stop talking), if you want to read more about this model from Kendra’s perspective, she also wrote about it! You can read her account here: https://littlekendra.com/2020/04/08/make-database-code-reusable-in-sql-source-control-with-deployment-filters/

Have a great week, stay safe and stay well!

Cloning From Home… a consideration.

“I know there’s a proverb which that says ‘To err is human,’ but a human error is nothing to what a computer can do if it tries.”
– Agatha Christie

Working from home is fine because we still have the right connections in place. Televisions to watch only the most stimulating and educational shows, telephones to get instantly in touch with those we hold most dear and crucially the internet to do everything we can to still be as (and sometimes more) productive at work as possible.

But it’s happening more and more now. We have to work from home and this is starting to turn up some problems.

And no. I don’t just mean that my wife is now acutely and accurately aware of how annoying I am.

Judge Judy Reaction GIF

I’m talking about clones. Specifically SQL Clone, and clones do not work great from home.

Now for anyone out there who has never heard of SQL Clone, where have you been?? It’s an incredibly intuitive, reliable tool for rapid provisioning of database copies (*cough* definitely not just lifted from the website) – in any case, it’s pretty darn cool.

One of the coolest things about this technology though is how it seamlessly plugs into the Microsoft Ecosystem by leveraging the VHD(X) technology available in x64 Windows. This means there’s no special file systems, no hard or software “appliances”, it’s very much plug and play (with a little tinkering around ports 14145 and 14146 of course!)

Naturally though it does come with it’s challenges, as does all technology, and it has been highlighted recently more so than ever.

The Problem

Whilst SQL Clone is a beautiful, elegant and easily automated answer to the database provisioning problem – there are 2 gotcha’s that you must be aware of when you start using the solution. SQL Clone relies on the relationship between the Image file (the centralized, virtualized parent, as it were that exists on a windows fileshare) and the Clones themselves (the 40mb diff disks on the hosts).

Now many people choose to put Clones onto their workstations, which for many of us is our laptops. We have SQL Server Developer installed and we pull down a few clones for different branches, for testing etc. etc. and all is well with the world.

When you’re in the office that is.

When a user queries or works with a SQL Clone and it requires any of the schema/data that was in the original copy and is not in the changes the user has made, a call is made back to the image file (the VHD mounted copy) to fetch it. When you’re in an office setting (with your cup of coffee in one hand and a colleague sat next to the other telling you about their weekend) this is fine because you’re connected directly to the company network and therefore the link between the clone on your laptop and the image file on the fileshare is short, strong and stable.

At home though this isn’t the case. Many of us work on VPNs that are “ok” on internet connections that can only be described as temperamental. So what happens when a clone tries to call back to the image file across this VPN, which is now much further away, across a sea of uncertainty and poor connection?

Bad things happen. Either the Clone cannot connect to the Image and it decides it no longer knows what it is, and it falls into Recovery Pending for a while until the connection is re-established, or if the connection is present it is just so slow.

sloth dmv GIF

This isn’t a fault of the tool, I hasten to add, it is just the nature of the technology. Much as we would expect our RDP sessions to be a little laggy if we were based in Greenland and the server was in Australia, it is just part of life.

So… are there solutions? You bet there are!

Option 1: The “jump box”

Many people I have worked with have found that they are still able to leverage SQL Clone whilst working from home by reducing the physical distance between the Clone and the Image, and have done so by introducing a Dev/Test “jump box”.

The way this works is by having an instance of SQL Server available within the company network onto which the Clones are provisioned.

This works great because it means that the link between the Clone and the Image is once again short and strong and stable, relying on the company network, but you can easily connect to or RDP onto this jump box if you need to work with them. Still using your VPN and internet from home? Check! Able to work with a Clone now though? Check!

Option 2: The Cloud

Welcome… to the world of tomorrow!

season 1 sb 129 GIF by SpongeBob SquarePants

By which of course I mean, the world that has been available to us for a while. Infrastructure as a Service (or IaaS) allows us to very easily spin up an additional dev/test server which can be used in the interim. Whilst this does incur a little extra cost in infrastructure it still means that you won’t need as much space on the VMs themselves, thank you SQL Clone!

As long as you have a fileshare available in say Azure or AWS and a Windows VM you’re pretty much good to go and once you’ve got Clones and Images up in the Cloud, you’re reliant on the networks of the providers, and I’ve got to say, they’re not too shabby at all!

Sneaky side note: ALL demos I give of SQL Clone actually run on an EC2 VM with a 91GB Image on a fileshare and it works great!

Option 3: Roll-your-own solution

Ok. I realize this one is not really a solution. But the thing we’ve highlighted here is that it’s all about the distance between the Clone and the Image. Those two love-birds cannot exist long distance.

So if you might have another ingeniously simple way of solving this, I would recommend having a read of this magnificent document written by an incredibly clever ex-colleague of mine and the “How It Works” documentation and then let me know what YOU come up with:

Links: Best Practices for SQL Provision and How It Works

Conclusion

There are a few ways of getting around this problem but they’re not always obvious or clear, and at this trying time, you just want solutions you have in place to work. We all do.

So if you are working with any of Redgate’s tools, or even if you just have a question that I or a colleague might be able to help with – please reach out to us, talking to us won’t cost you anything, but it sure as heck might gain you something!

Stay safe, stay well and have a great week!

Me on Twitter: @PlantBasedSQL
Redgate on twitter: @Redgate
Redgate Support Team: support@red-gate.com

Status: Working from home

“What you stay focused on will grow.”
Roy T. Bennett

As of Monday 16th March 2020 I have been a remote worker.

Ever since I left University I have worked in busy, bustling offices where the air runs thick with collaboration, questions and social commentary.

But now… I’m at home. I guess you could say I’m not quite sure how to come to terms with this. It certainly is strange knowing that my commute in the morning has gone from 50 minutes on the bus to 50 seconds from bedroom to dining room (via the kitchen for coffee). It’s even stranger though that I don’t get to see colleagues; friends, who I’ve worked with for years and who’s smiling faces, cheerful demeanor and indomitable spirits have been huge contributing factors to my desire to tackle the working day and make as much of it as i possibly can.

In the past remote working was simply the odd days I worked here and there from home, with nothing but my laptop because it was a quieter day when I could do some learning as well as some other life task like going to the doctor or dropping the car off to be serviced – therein lies the problem.

I had come to associate working from home with quieter periods of time, when I could focus on 1 thing at a time, maybe work from the sofa and treat myself to the occasional snack.

As of Monday however, the entire office has been locked down and we are _all_ working from home… for how long? I don’t think anybody knows. The only certainty in the world right now is that nothing is certain – so it is time to put into practice something that I always preach, but rarely am pushed to exercise. I will have to change my mindset.

I’m not alone in this at all – you may be reading this thinking “but Chris, working from home is so easy, I actually get more done and I’m more focused!” and if that is the case I applaud you, and I wish I could share those same abilities. However if you’re like me and suddenly working from home by directive has jarred you, here are my top 3 tips for working from home that have helped me get to grips with it and maintain my productivity:

1- Find a routine

This is perhaps the most important on my personal list because in the past I have found myself getting out of bed at 7.30/8am on days where I worked from home. This is ~2 hours after I would normally get up when commuting into the office and whilst this sort of lay in is great at the weekend to get some rest, it also leads to me being groggy and not fully awake when your start your morning meetings/calls/work and doesn’t help you focus or build a reasonable mental list of priorities.

Take aspects of your normal daily routine and replace them so that you build up a Monday-Friday (for example) that represents something similar to the structure you enjoyed when working from the office. Here is an example of how I have changed my schedule to adapt to my new working situation; I would normally catch the bus to the office which would take anywhere between 40 and 50 minutes first thing in the morning. Now at exactly the same time in the morning I go for a 30-40 minute brisk walk to simulate that commute – match something you did to something creative, compelling, healthy or otherwise you can do from home instead.

The thing to bear in mind is that finishing work for the day should also factor into your plan. It is very very easy when one works from home, to simply leave the laptop open or code running or join a late call. These things will rapidly eat into your personal life though so once you hit your magic “clocking off” time… clock off.

2 – Create separation between work and home

Even though they are now one and the same, you have to keep a separation between your work and home lives. I’ve heard it described by many people that they have set up in the study or in the office – but what do you do when you live in a small flat? Or if you live with your parents who are _also_ working from home and you have to say, work in your bedroom?

My solution to this, as I have a similar problem, is to make certain touches to transform myself and the space i’m working in to make it feel as though there is a transition between going from home to work.

Once I have come back from my walk I relax and make a coffee and some toast or cereal whilst watching YouTube videos, then at 7.55am precisely, my Amazon Echo buzzes an alarm, I turn the television off and I begin “building” my work space. A process which involves taking out the monitor and accompanying cables, setting them up on the dining room table, neatly arranging where everything should go and plugging in my phone and finally ensuring that I have a full bottle of water on standby to stay hydrated.

Conversely at the end of the day I will go through the same ritual in reverse to the point where we are all able to sit around the dining room table and have dinner with no trace that I was ever there working. This act of transformation somehow makes the space seem different, and gives it a different energy, which means i’m not thinking about work problems whilst I eat with my family.

3 – Communicate, Communicate, Communicate

Ok. This one is a no-brainer, but there are subtle levels to communication that can really help when you’re feeling the weight of working from home hovering above you like so much foreboding.

Whenever you’re feeling the pinch of distraction or you’re lacking motivation, message a colleague you would normally speak to on a daily basis at the office and ask them how they are. It seems simple but if you rotate who this person is and just check in on them you make them feel though about, cared about and appreciated. Not only does this give them the motivation to carry on but is a selfless act that can also revamp your own spirits and the resulting conversation can even inspire the thoughts you need to help with whatever you’re working on.

There are so many posts about working from home and engaging with others on a technical and personal level, such as Kendra’s post on SSC, Kathi’s post on SimpleTalk or this incredibly detailed and insightful post from Alice Goldfuss, that many of these will be repeats on what others have said. However, I think my personal top 3 on communication specifically are:

  1. Turn your webcam on – be seen and see other people and enjoy the smiles and the thinking and the body language you would otherwise be missing out on.
  2. React and be reacted to -if you use Teams or Slack or any kind of collaboration tool, make sure that when people make statements or ask questions, you either offer feedback or at least react. A thumbs up emoji at least lets people know that you are listening, allowing them to feel validated and supported and not think they’re just shouting into the void.
  3. Learn to use a mute button – we have all been in situations where someone has mouth breathed the meeting to postponement or someone has had a coughing fit or their child(ren) have come in asking questions – all of these are perfectly fine because we’re humans… but. That is no excuse for everyone in the meeting internal or external to hear that. Liberally use your mute button on your meeting software or headset and make sure you are able to contribute meaningfully, but that when you’re not contributing, you’re also not hindering others from doing so.

Conclusion

Right now is a difficult time. Very much so – and I hope you’re all doing well and staying healthy and happy. Working from home makes up a small portion of what everyone is feeling and struggling against at this point in time and so we should remember to be mindful and grateful that we even are a part of companies who are able to support us working from home as the ability to even do so is a blessing.

Remember to take your mindset and find a way to turn each of the things you struggle with into positives; recognize them, appreciate them and ask yourself why you’re feeling that way, and then find a way to deal with it that makes you more productive and/or happier – most companies have a wealth of people who are experienced in or who are dedicated to help you working from home, don’t be afraid to ask for help if you need it and see if someone can help you tackle some of the problems you’re facing. Everyone is different and will need different things, just because you don’t feel comfortable working from home, for any reason, doesn’t mean you’re doing things wrong. We’re all learning together.

So stay safe, stay healthy and stay awesome and I’ll leave you with my favorite tweet so far on the matter:

P.S. We also just recorded a DBAle Special Episode on working from home, where all podcast participants were working from their respective homes, if you’re interested, you’ll be able to listen on Spotify, Apple Music and directly here: https://www.red-gate.com/hub/events/entrypage/dbale when it goes live in the next few days 🙂

Saying “no” doesn’t mean you don’t care

“One of the most painfully inauthentic ways we show up in our lives sometimes is saying “yes” when we mean “no,” and saying “no” when we mean “hell yes.””
Brené Brown

As someone who loves to please others, I often find that I end up with a calendar that looks like someone is very good at playing tetris, with meetings and demonstrations and training as the blocks and my days fill up dramatically to the point where finding white space or even a lunch break is difficult to do. Sound familiar?

Let me be clear, saying “yes” is one of the most powerful statements you have to offer – it is a clear indication that you want to help someone, or that you care about what they are doing. Yes is a profoundly positive and exciting word.

But what happens when you say yes one too many times?

  • Meetings start to pile up meeting you are running from one to the other and not getting time to focus on your core responsibilities
  • Meetings start eating into your personal time “oh I was hoping to leave at X o’clock but I can probably push that a bit”… an hour… two hours…etc.
  • The quality of your work slips because you’re balancing too many plates and only able to give an ever decreasing % of your time to individual tasks
  • Conflicts occur more easily when people book in follow up meetings at the same times as other meetings you’ve said yes to
  • People’s expectation of you shifts – not knowing that you are overburdened they expect you to thrive on that sort of “busy” and will continue to come to you with requirements

The negative ramifications of saying yes can be many, which leaves us in a fundamentally twisted catch-22, where what is supposed to be your most positive word can actually harm your work, your personal relationships and even your mental health.

Now I’m not saying that you should be asserting “no” to everything someone asks, it is very much a case of how you communicate. Communication is the best way of handling these sorts of situations because, and you may forget this often (but it’s worth reminding yourself) – people are just that, people.

No one is going to fly off the handle if you tell them “I can appreciate your situation and I understand why you require me for this, however I’m currently at capacity and my current priorities are dealing with X and Y instead.” There is nothing stopping you from also suggesting other avenues they may be able to go down, or other people they may be able to speak to, to help them with their problem/meeting etc.

One of my favorite phrases in the world is “When you walk a mile in someone else’s shoes” (then you’re a mile away and you have their shoes! haha) but the key is not trying to do the same job or answer the same queries as someone, it’s merely empathizing with them and seeing it from their perspective. So when you are struggling with workload, look for proactive solutions to help, but don’t feel you have to put yourself in harms way to do so.

Conversely, if you work with someone who is constantly overburdened or chasing their own tail – consider, what can you do to help them? If you have additional overhead, be proactive and see if there’s anything you can do to share problems or thoughts.

A phrase I always hear when working with people to implement DevOps processes for their databases is “I simply don’t have time for this at the moment.“, despite the fact that the very solutions we’re discussing – whether they are related to tooling or processes– will save them time and help them get a handle on their current and future workloads. In many situations, this can be simply addressed by breaking down some of the silos they’re experiencing in their company, and asking for help.

The top 3 tips I can offer to people who are afraid of saying no, or who flat out refuse to do so are this:

  1. Communicate. Tell people you feel overwhelmed, help them understand why your current load is too much so they understand what you’re up against.
  2. Ask for help. Many consider this to be a sign of weakness, but the most successful people aren’t the one’s who just do everything by themselves, they are the ones who know how to tap into the empathy, expertise and knowledge of those around them.
  3. Manage your time better. Revisit your priority list and identify what you can delegate, or ask for help on. Make time for yourself to catch up, to do admin work or to blog, for instance! Definitely make sure you take time for things (even block them out in your calendar provisionally) like lunches and leaving on time because allowing your brain to break away from the constant pace of everyday life when it’s not overwhelmed inspires creativity and problem solving, and will actually better prepare you for the challenges ahead.

So no. Saying “no” does not mean you don’t care, in fact it means the opposite, you do care – but you’re prioritizing, doing your best to ensure the demands of the job are met, but most importantly you’re putting your own health first.

Stop calling yourself an idiot.

“Be you, love you. All ways, always.”
Alexandra Elle

You’ve probably heard it a lot; in the workplace, at home, from yourself. The dreaded phrase “oh sorry, I’m just being an idiot.” It doesn’t always have to be “idiot”, it can be “moron”, “I’m being stupid”… the list goes on and on.

I’m going to say something you may or may not like, whether you do or not is irrelevant as it does not diminish it’s truth.

You are not an idiot. Nor have you ever been one.

Many people use this phrase to excuse mistakes they make or to emphasize that they know better but had followed a gut instinct to do something forgetting the best or ‘correct’ way of doing it, but that is neither stupidity nor idiocy. It is being human.

I work with so many intensely clever people, not just when it comes to knowing about DevOps, or knowing about SQL Server, but about things in general. Regardless of what the thing you know is, you know something and in many cases more about it than many people around you and you should take pride in that. I’m not by any means insisting that you should be arrogant or full of yourself, but you should be confident about the things you know and the experiences you have had that got you to that point.

Thinking less of yourself for simple mistakes (and that’s all they are, small, easily rectified things) is damaging not only to other people’s perceptions of you but it’s how you are reinforcing your negative perception of yourself. The more you repeat this to yourself like a mantra you undermine the self belief and self love you have for yourself, you are making a very simple but very effective statement to the world that you are not worthy.

Do you really believe that? If so, then it is time for introspection and a more fundamental soul searching exercise to lead yourself to acceptance and contentment. My feeling is though that 99% of people reading this will know that they are worthy, both of the love of other people as well as the love of themselves.

It is deeply rooted in the language we use and is an observed behavior that we grow up with and adopt into our own personal idiosyncrasies, so it is time to change up the language we use about ourselves. Take each mistake or negative feeling you have about your own knowledge, observations and/or performance and simply change the way you describe it to yourself, which can have a huge impact on how you remember and feel about that event. Challenge the use of negative terminology and use updated and positive self-affirming phrasing – you can find some great examples of this here: https://www.healthline.com/health/positive-self-talk#examples-of-positive-self–talk

I’ll give you a key example as I am very guilty of doing this myself, in the hope’s that giving a personal context will allow you to more easily identify where you can give yourself some more love. Yesterday I had a meeting with the wonderful Kendra Little (who I have already spoken about a number of times on here, but yet again she comes to the rescue) where we were discussing an upcoming webinar that we’ll be conducting together. I asked Kendra for some additional time for us to sync up later in the week so we could best discuss the format for the webinar, do a run through and (ad verbatim):

“I need to know roughly when each of us should be talking, because whilst I would naturally be more quiet and let the super-expert speak, but I don’t want to come across as the creepy guy who joins a webinar and sits there in silence not contributing anything for an hour.”

Can you see what was wrong with that? The language I used to immediate diminish my own value, without even being conscious of it at the time?

Quite rightly, I was met with silence on Kendra’s part which was immediately followed up with: “Chris. You just managed to describe all of the key benefits of this model over the more traditional single models in detail, in a way that people will understand. I don’t think you have anything to worry about.”

That stuck with me all evening and on reflection on how I spoke about myself I realize how right Kendra is. I am here for a reason, I was invited to participate in the webinar for a reason, and people care what I have to say.

So take some time for you, take a good hard look at how you speak about yourself, your accomplishments and your mistakes and realize, you are anything but an idiot. You are wonderful.

The best vegan salted caramel apple and pear crumble/crisp I ever did see!

Pull up a chair. Take a taste. Come join us. Life is so endlessly delicious.”
Ruth Reichl

Imma stop you right now. I know how this goes, you open a blog post about food and you expect 3 things. A story about why I made it, the recipe and pictures.

I have no pictures. We ate it. I’m sorry, I couldn’t wait.

There’s no story either. My mum and step-dad were coming round for dinner last night (we made a roasted cauliflower, new potato and mushroom curry which was insanely good – yay, go my wife for being an awesome cook!) but we needed a dessert.

I found a couple of recipes I liked but each had elements of the other I wanted to include. So I made my own! Specific thanks to Bosh! for the Salted Caramel recipe in particular from their UK show “Living on the Veg“.

So without further ado, or description of the weather outside or why I love comfort food. Here’s a recipe you should try!

For the filling:

  • 1 x Pink Lady apple
  • 1 x cooking apple
  • 1 x braeburn apple
  • 3 x rocha pears
  • 3 tablespoons maple syrup
  • 2 teaspoons cinnamon
  • Pinch of Salt
  • 1 teaspoon coconut oil

For the salted caramel:

  • 100g pitted dates (Medjool desirable)
  • 120ml hot water
  • Large pinch flaked sea salt

For the crumble/crisp topping:

  • 75g vegan butter / coconut oil
  • 50g Soft Brown Sugar
  • 115g all-purpose flour
  • 1 heaped tablespoons ground almonds
  • 1 teaspoon cinnamon
  • 1 small handful rolled oats

Steps:

  1. Pre-heat oven to 180 C (350 F)
  2. Peel, core and chop apples and pears into cubes, about the size of a large thumbnail
  3. Melt the coconut oil in a pan over a medium heat and then add the apples, pears, salt, cinnamon and maple syrup then cook for 10 minutes until soft
  4. Whilst the fruit is cooking add the topping ingredients to a bowl and (using your hands) combine into a breadcrumb style texture
  5. Add the dates, water and salt to a blender / nutribullet and blend until smooth
  6. Take the fruit off of the heat and stir in the date caramel mixture to combine then pour contents into an over proof dish
  7. Top with the crumble mixture and lightly press down to ensure all gaps are filled
  8. Bake uncovered for 30 minutes then serve piping hot with vegan custard or cream-alternative

Enjoy!

A brief history of PlantBasedSQL

There is no fundamental difference between man and animals in their ability to feel pleasure and pain, happiness, and misery.”
Charles Darwin

Note: The post below is my viewpoint on going Vegan and is not designed in anyway to attack or criticise anyone for the choices they make. I will not describe in depth what I witnessed during my research into making this choice for myself but I will provide optional links at the end of the post if you wish to start looking into Veganism. Thank you.

In December 2016 I went vegetarian. I had been living with my then-partner, now-wife for about 9 months and things were going great. When we got together though, I was a vehement meat-eater, in fact eater of all things animal; meat, dairy, eggs, you name it.

I even remember arguing with one of our friends over Christmas in 2015 that, and I quote, “I can’t see myself ever NOT eating meat. Ever.”

My wife though, at that time, was mostly pescatarian and therefore we never really had or cooked meat at home. I love to cook so from the moment we moved in together into a tiny (TINY!!!) flat in March 2016 I saw it mostly as a challenge that I could rise to, to cook more vegetarian food; so I started doing some research.

What I found horrified me to my core.

Many of the vegetarian and vegan bloggers I started to check out included (as part of their blogs and recipes I was following) justification for their lifestyle, reasons why they chose a vegetarian or plant based lifestyle and I was intrigued. I checked out the references, the sources and studies and documentaries, I made notes and discussed my thoughts with my wife and family and others I knew who were veggie or vegan and realized I had lived a life in ignorant bliss of the suffering that took place to fulfill my need for a burger, or bacon, even sweets like wine gums (which I loved but are full of gelatin).

So I made the switch and honestly, it shocked everyone around me (particularly my family) that I, the meat eater, the lover of BBQ, meaty curries and Tex-Mex, would give it up for the rest of my life. But everybody blamed my wife for this. Perhaps blame is too strong a word though… they attributed it to my now living with a mostly-vegetarian.

But no, I came to this conclusion myself. From pictures of slaughterhouses, caged animals and intense farming of everything from cows to pigs to fish, I realized that I would never see meat in the same light again, and it’s not as though I didn’t KNOW this happened. When I was a meat eater of course I knew this was the case, but when I really looked, I realized that my personal dinner preferences should never, ever cause something like this.

The research continued and just over 2 short years later on 1st January 2019 I did something great, I tried Veganuary. Veganuary is a vegan-January challenge that asks only that you give up animal products and try eating and living a Vegan lifestyle.

At this point the teenager in our house had already been vegan for some time; she had come from a predominantly meat-eating country (Romania) and so at home we were mostly cooking plant-based so we could all eat together anyway! Curries, stews, soups, pasta, pizza, nut-burgers, salads, buddha bowls, our diet was not restrictive – but i was still eating eggs and cheese at work, and when we went out for dinner. It wasn’t long before the articles and documentaries led me to look at the dairy and egg industries.

Again, absolutely terrifying.

Shortly before trying Veganuary, in September or October 2018 I had a nightmare. I won’t go into detail but involved trying desperately in vain to free cows from a dairy-slash-slaughterhouse and it was harrowing. I woke up completely drenched in a cold sweat and decided that it would not be long until I completely phased out all animal products, and January was the time to do so.

I don’t miss cheese, or eggs. I thought it would be hard, but it wasn’t. Yes, vegan cheese isn’t quite there yet (unless you’ve tried the new Applewood UK Vegan cheddar OHMIGOSH) but honestly, even if the alternative isn’t there yet – it’s still better than the version requiring we first exploit a living being that doesn’t have the means to defend itself.

Now, almost 12 months later, I still maintain that (besides the decisions to marry my wife, to look after our teen and to join Redgate) it was one of the very best decisions I have ever made.

I encourage you, if you’ve ever been curious, to try it for yourself. It’s surprisingly easy, but most of all it gets you to think about what you eat, how you fuel yourself and about the well-being of all life on the planet. If you need some resources, or want to answer some common questions, I’ve included some resources below:

Where do I get my B12 and Protein? Watch the Game Changers Netflix Documentary – trailer here: https://www.youtube.com/watch?v=iSpglxHTJVM

Is a plant based diet healthy? Watch the Forks Over Knives documentary on Netflix or Youtube – trailer here: https://www.youtube.com/watch?v=DZb-35oV_7E

How would eating vegan help to stop animal cruelty? Watch the Earthlings and Cowspriacy documentaries – trailers here: https://www.youtube.com/watch?v=Hm7Babs_FJU and https://www.youtube.com/watch?v=nV04zyfLyN4

Where are some good resources for plant-based cooking? You can follow the below leaders in this arena (there are loads on YouTube in general though):

Where can I eat Vegan? There are tonnes of good places that have their own vegan menus and options, a few chain restaurants in the UK who offer great vegan alternatives inlclude:

  • Bella Italia
  • Pizza Express
  • Frankie & Benny’s
  • Zizzi
  • Wagamama
  • Byron Burger
  • Pret a manger
  • Giraffe
  • Pizza Hut
  • Papa Johns
  • and Subway!

Happy holidays and here’s to a happy 2020!