Faits :
A.
A._, psychiatre et psychothérapeute, a engagé B._, au bénéfice d'un diplôme de psychologue acquis en France, en qualité de secrétaire dès le 1 er octobre 2011.
Par la suite, les parties ont noué une relation amoureuse et vécu en concubinage dès juillet 2012. Le couple a eu un fils, avant de se séparer le 13 septembre 2014.
Les relations contractuelles entre les parties ont été réglées par quatre contrats successifs de durée indéterminée, signés les 14 octobre 2011, 12 décembre 2011, 12 juin 2012 et 25 mars 2013. L'employée a ainsi été l'assistante personnelle de A._, puis son assistante et collaboratrice clinique et enfin, psychologue-sexologue, à des taux d'activité variés.
Le dernier de ces contrats, prenant effet le 1 er avril 2013, prévoyait un salaire mensuel brut de 6'913 fr.35 pour un taux d'activité de 100% représentant 40 heures par semaine. Une des tâches de l'employée était d'assurer le fonctionnement administratif du cabinet médical.
Le 10 septembre 2014, A._ a écrit à B._ au sujet d'une proposition de collaboration qu'il avait formulée et qui aurait recueilli l'accord de l'employée; il s'agissait pour celle-ci de passer "pour des raisons économiques, à partir du 1er octobre 2014, à un pourcentage de temps de travail de 20% à la place du taux actuel de 100% ". Deux jours plus tard, l'employeur a transmis à l'employée ses nouveaux horaires de travail correspondant à un taux d'activité de 20%.
B._ a requis et obtenu des indemnités de chômage pour la période du 1 er octobre 2014 au 30 novembre 2014, soit un montant net de 4'173 fr.20.
Elle s'est trouvée en incapacité de travail pour cause de maladie du 1 er au 11 octobre 2014, selon un certificat médical daté du 6 octobre 2014; elle en a informé A._. L'arrêt maladie a été prolongé le 9 octobre 2014 jusqu'au 13 novembre 2014, puis le 11 novembre jusqu'au 22 novembre 2014, sans qu'il soit établi si A._ a été informé de ces prolongations.
Par courriel du 10 octobre 2014, B._ s'est plainte auprès de A._ de ce que le délai de congé n'avait pas été respecté, d'avoir été pénalisée par l'assurance-chômage ensuite du caractère abrupt de la modification de son contrat de travail et de ne pas obtenir la pension alimentaire de leur enfant. Elle déclarait s'interroger sur la possibilité de continuer leurs relations de travail dans ces conditions.
Le 17 octobre 2014, A._ a écrit à B._ en prétendant qu'elle avait abandonné son poste de travail. Par courrier daté du lendemain, celle-ci a réfuté cette accusation.
Le 28 octobre 2014, A._ a résilié sur-le-champ le contrat de travail, avec effet rétroactif au 15 octobre 2014.
B.
Après avoir saisi, vainement, l'autorité de conciliation, B._ a porté sa demande devant le Tribunal civil de l'arrondissement de Lausanne en concluant au versement par A._ de 27'653 fr.40 à titre de salaire d'octobre 2014 à janvier 2015, 1'580 fr. à titre d'indemnité pour vacances non prises, 20'740 fr.05 à titre d'indemnité pour licenciement immédiat injustifié et 2'071 fr.45 à titre de salaire net impayé de janvier 2014 à septembre 2014, ainsi qu'à la délivrance d'un certificat de travail conforme à l'<ref-law>.
L'employeur a conclu au rejet de la demande et a invoqué en compensation, en tant que besoin, sa créance en paiement de la participation de l'employée aux frais du ménage qu'il formait avec elle, pour la période de juin à septembre 2014.
Le 6 juin 2016, la Caisse cantonale de chômage a déposé une requête en intervention. Elle concluait à ce qu'il fût constaté qu'elle était subrogée à la demanderesse dans ses droits à concurrence de 4'173 fr.20, représentant l'avance sur les indemnités de chômage et allocations familiales versées à celle-ci pour la période du 1 er octobre 2014 au 30 novembre 2014, et au versement de ce montant par le défendeur.
Par jugement du 15 août 2017, le tribunal a fait droit aux conclusions de la demanderesse dans une large mesure et entièrement admis les conclusions de l'intervenante. Il a considéré le licenciement immédiat du 28 octobre 2014 comme tardif et, partant, injustifié, dès lors qu'il avait été notifié 17 jours après la fin connue de l'arrêt maladie de l'employée et 10 jours après que celle-ci s'était déterminée sur les reproches formulés à son encontre. La résiliation était également abusive au sens de l'<ref-law> dans la mesure où elle découlait de l'absence d'accord entre les parties quant à la modification du taux d'activité de l'employée. Le tribunal a condamné ainsi le défendeur à verser à la demanderesse 6'913 fr.35 à titre d'indemnité pour licenciement immédiat injustifié. En outre, comme le congé était intervenu pendant une période de protection, le défendeur devait payer à la demanderesse une indemnité correspondant au salaire pendant la période de maladie (du 1 er octobre au 22 novembre 2014), ainsi que durant les deux mois du délai de congé (décembre 2014 et janvier 2015), soit un montant total de 23'480 fr.20, part revenant à l'intervenante déduite ([6'913 fr.35 x 4 mois]./. 4'173 fr.20). A cela s'ajoutaient les montants de 2'304 fr.40 à titre d'indemnité pour 6,6 jours de vacances et de 2'071 fr.45 représentant le salaire impayé de janvier à septembre 2014, provenant de la différence entre le montant annoncé sur les fiches de salaire et le montant effectivement versé par le défendeur. Le tribunal a finalement ordonné à ce dernier de remettre à la demanderesse dans un délai de dix jours dès jugement définitif et exécutoire un certificat de travail conforme à l'art. 330 [recte: 330a] al. 2 CO et dit qu'il devait verser à la Caisse cantonale de chômage la somme de 4'173 fr.20.
Statuant le 11 octobre 2018, la Cour d'appel civile du Tribunal cantonal du canton de Vaud a rejeté l'appel formé par A._ dans un arrêt dont les motifs seront évoqués plus loin dans la mesure nécessaire.
C.
A._ interjette un recours en matière civile contre cet arrêt, concluant principalement au rejet des conclusions prises par B._ dans sa demande et de celles prises par la Caisse cantonale de chômage.
B._ propose le rejet du recours.
Le recourant a déposé une réplique spontanée, suscitant le dépôt d'une duplique de l'intimée.
La Caisse cantonale de chômage s'en remet à justice.
Pour sa part, la cour cantonale se réfère aux considérants de son arrêt.
Par ordonnance présidentielle du 3 janvier 2019, la requête d'effet suspensif du recourant a été rejetée.

Considérant en droit :
1.
L'arrêt attaqué est une décision finale (<ref-law>) rendue en matière civile (<ref-law>) par le tribunal supérieur désigné comme autorité cantonale de dernière instance, lequel a statué sur recours (<ref-law>). La cause atteint la valeur litigieuse minimale de 15'000 fr. ouvrant le recours en matière civile dans les affaires relevant du droit du travail (<ref-law>). Le recours est exercé par la partie qui a succombé dans ses conclusions libératoires et qui a donc qualité pour recourir (<ref-law>); il a été déposé dans le délai (<ref-law>) et la forme (<ref-law>) prévus par la loi. Le recours est en principe recevable, sous réserve de l'examen des griefs particuliers.
2.
2.1. Le recours en matière civile peut être exercé pour violation du droit fédéral (<ref-law>), y compris le droit constitutionnel (<ref-ruling> consid. 2.1 p. 247; <ref-ruling> consid. 2.4 p. 313). Le Tribunal fédéral applique le droit d'office (<ref-law>). Il n'est donc limité ni par les arguments soulevés dans le recours, ni par la motivation retenue par l'autorité précédente; il peut admettre un recours pour un autre motif que ceux qui ont été invoqués et il peut rejeter un recours en adoptant une argumentation différente de celle de l'autorité précédente (<ref-ruling> consid. 2 p. 89; <ref-ruling> consid. 1.3 p. 336; <ref-ruling> consid. 1.4; <ref-ruling> consid. 1.4 p. 400). Compte tenu de l'exigence de motivation contenue à l'art. 42 al. 1 et 2 LTF, sous peine d'irrecevabilité (<ref-law>), le Tribunal fédéral n'examine en principe que les griefs invoqués, sauf en cas d'erreurs juridiques manifestes. Il n'est pas tenu de traiter, comme le ferait une autorité de première instance, toutes les questions juridiques qui se posent, lorsque celles-ci ne sont plus discutées devant lui (<ref-ruling> consid. 2 p. 88 s., 115 consid. 2 p. 116; <ref-ruling> consid. 1.3). Par exception à la règle selon laquelle il applique le droit d'office, il n'examine la violation d'un droit constitutionnel que si le grief a été invoqué et motivé de façon détaillée (<ref-law>; <ref-ruling> consid. 2.3; <ref-ruling> consid. 1.3; <ref-ruling> consid. 1.4 in fine).
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>). Il ne peut rectifier ou compléter les constatations de l'autorité précédente que si elles sont manifestement inexactes ou découlent d'une violation du droit au sens de l'<ref-law> (<ref-law>). "Manifestement inexactes" signifie ici "arbitraires" (<ref-ruling> consid. 1.3.1 p. 253; <ref-ruling> consid. 2 p. 117; <ref-ruling> consid. 1.5). Encore faut-il que la correction du vice soit susceptible d'influer sur le sort de la cause (<ref-law>).
La critique de l'état de fait retenu est soumise au principe strict de l'allégation énoncé par l'<ref-law> (<ref-ruling> consid. 2.3 p. 266 et les références). La partie qui entend attaquer les faits constatés par l'autorité précédente doit expliquer clairement et de manière circonstanciée en quoi les conditions précitées seraient réalisées (<ref-ruling> consid. 1.3.1 p. 18 et les références). Si elle souhaite obtenir un complètement de l'état de fait, elle doit aussi démontrer, par des renvois précis aux pièces du dossier, qu'elle a présenté aux autorités précédentes en conformité avec les règles de procédure les faits juridiquement pertinents à cet égard et les moyens de preuve adéquats (<ref-ruling> consid. 2 p. 90). Si la critique ne satisfait pas à ces exigences, les allégations relatives à un état de fait qui s'écarterait de celui de la décision attaquée ne pourront pas être prises en considération (<ref-ruling> consid. 1.3.1 p. 18). Aucun fait nouveau ni preuve nouvelle ne peut être présenté à moins de résulter de la décision de l'autorité précédente (<ref-law>).
3.
Il est constant que les parties ont été liées par un contrat de travail, lequel a pris fin lorsque l'employeur a congédié l'employée de manière abrupte le 28 octobre 2014. Le litige porte sur les montants que l'employeur a été condamné à verser à l'employée et à l'intervenante au titre du contrat de travail et de la résiliation de ce dernier. S'agissant du certificat de travail qu'il incombait à l'employeur de délivrer à l'employée, le recours se révèle irrecevable. En effet, malgré les conclusions du recourant tendant au rejet in integro de la demande de l'employée, aucune motivation n'est consacrée à cette question dans le mémoire de recours (cf. <ref-law>).
4.
4.1. Le coeur du litige est lié à la résiliation immédiate du contrat de travail. La cour cantonale a considéré qu'elle n'était pas fondée sur un juste motif: l'employeur invoquait l'abandon par l'employée de son poste de travail; or, il avait attendu, pour s'en prévaloir, 17 jours après la fin connue de l'arrêt maladie de l'intimée et 10 jours après que celle-ci s'était déterminée sur les reproches formulés à son encontre, ce qui était tardif. Cette résiliation était de surcroît abusive, dès lors qu'elle constituait un congé-modification découlant de l'absence d'accord entre les parties quant à la modification du taux d'activité de l'employée. Cela étant, les juges cantonaux ont relevé que le caractère tant injustifié qu'abusif de la résiliation n'était pas contesté par l'employeur. Ils ont condamné ce dernier à verser à l'employée une somme de 6'913 fr.35 à titre d'indemnité pour licenciement avec effet immédiat injustifié en application de l'<ref-law>.
4.2. Le recourant ne prétend pas que la résiliation immédiate serait justifiée. Il s'attache en revanche à démontrer que le montant dû à l'employée du chef de la résiliation injustifiée de son contrat devrait être calculé sur la base d'un salaire de 1'382 fr.65 par mois (soit 20% de 6'913 fr.35), compte tenu de l'accord prétendument venu à chef quant à une réduction à 20% du taux d'activité de l'employée. Le grief tiré d'une violation de l'<ref-law> n'a pas d'autre portée. Il ne peut qu'être rejeté.
4.3. La question est donc de savoir ce qu'il est advenu d'un hypothétique accord prévoyant une réduction du taux d'activité de l'employée à compter du 1 er octobre 2014.
La cour cantonale a retenu, en fait, que l'employeur avait offert à l'employée, par courriel du 10 septembre 2014, de réduire son taux d'activité à 20% dès le 1 er octobre 2014. Elle s'est abstenue de déterminer si, dans un premier temps, l'employée avait ou non accepté cette offre. En effet, de deux choses l'une: soit elle ne l'avait pas acceptée, mais au contraire refusée comme le courriel subséquent du 10 octobre 2014 en était l'illustration; soit elle l'avait initialement acceptée et ce courriel constituait alors une déclaration d'invalidation partielle pour erreur essentielle (<ref-law>), laquelle était pleinement efficace; dans ce cas de figure, l'invalidation portait sur la réduction du taux d'activité pendant le délai de congé.
Afin de parvenir à cette conclusion, les juges cantonaux ont raisonné comme suit. Il était capital pour l'employée qu'elle obtienne des indemnités de chômage pour compenser la différence de revenu résultant de la modification de son taux d'activité; elle l'avait manifesté à l'employeur en le questionnant sur l'effet que la réduction proposée aurait sur ses droits à des prestations de l'assurance-chômage. Il importait peu de savoir si et, le cas échéant, ce que le recourant lui avait répondu. Il pouvait et devait se rendre compte de l'importance décisive que le droit de l'employée à des prestations de l'assurance-chômage avait pour l'acceptation ou le refus de son offre. L'employée s'était vue ultérieurement répondre, par la caisse de chômage, qu'il ne lui serait versé aucune indemnité durant un laps de temps correspondant au délai de congé qui aurait dû être respecté avant l'entrée en vigueur de cette réduction. L'employée avait ainsi exigé de l'employeur le respect de ce délai par courriel du 10 octobre 2014 en faisant valoir qu'elle avait été "conne de vouloir prendre tout sur (elle), partir comme (l'employeur avait) envie du jour au lendemain et être pénalisée par le chômage"; par ce courriel, elle avait valablement invoqué s'être trouvée dans l'erreur sur un point essentiel de l'accord intervenu.
4.4. Parmi plusieurs violations du droit prétendument commises par la cour cantonale, le recourant se plaint d'une mauvaise application de l'<ref-law>. A son sens, on se trouverait en présence d'une simple erreur sur les motifs - plus précisément une erreur sur les effets accessoires de l'accord - qui ne pourrait justifier l'invalidation de ce dernier, ce que la cour cantonale aurait méconnu.
4.4.1. Selon l'<ref-law>, le contrat n'oblige pas celle des parties qui, au moment de conclure, était dans une erreur essentielle. L'erreur qui porte uniquement sur les motifs n'est en principe pas essentielle (<ref-law>; <ref-ruling> consid. 3b). Fait exception l'erreur de base au sens de l'<ref-law> ( Grundlagenirrtum). Selon cette disposition, l'erreur est essentielle lorsqu'elle porte sur des faits que la loyauté commerciale permettait à celui qui se prévaut de son erreur de considérer comme des éléments nécessaires du contrat. L'erreur essentielle au sens de l'<ref-law> doit porter tout d'abord sur un fait subjectivement essentiel: en se plaçant du point de vue de la partie qui était dans l'erreur, il faut que l'on puisse admettre que, subjectivement, son erreur l'a effectivement déterminée à conclure le contrat ou à le conclure aux conditions convenues. Il faut ensuite qu'il soit justifié de considérer le fait sur lequel porte l'erreur comme objectivement un élément essentiel du contrat: le cocontractant doit pouvoir se rendre compte, de bonne foi, que l'erreur de la victime porte sur un fait qui était objectivement de nature à la déterminer à conclure le contrat ou à le conclure aux conditions convenues (<ref-ruling> consid. 3.4.1; <ref-ruling> consid. 2.2; <ref-ruling> consid. 1.3 p. 741; <ref-ruling> consid. 5.3; <ref-ruling> consid. 3a).
Savoir si et dans quelle mesure une partie se trouve dans l'erreur au moment où elle manifeste une volonté relève du fait, tandis qu'apprécier si l'erreur constatée est essentielle au sens de l'<ref-law> relève du droit (ATF <ref-ruling> consid. 2.2; <ref-ruling> consid. 5.3.1; <ref-ruling> consid. 1a).
4.4.2. La cour cantonale a considéré que l'employée s'était trouvée en proie à une erreur de base au sens de l'<ref-law>. Pouvoir obtenir sans délai par le biais de l'assurance-chômage le différentiel entre son plein salaire et celui correspondant à son taux d'activité réduit à 20% à compter du 1 er octobre 2014 revêtait pour elle un caractère essentiel. Cela étant, elle a erré en jugeant que cette circonstance devait objectivement être considérée comme essentielle selon la loyauté commerciale. Cette condition fait défaut. Lorsqu'une réduction du taux d'activité d'un employé est convenue, les expectatives de ce dernier s'agissant de l'assurance-chômage ne font pas partie des éléments que la loyauté commerciale impose à l'employeur de tenir pour essentiels. Celui-ci n'a pas à inférer d'une question qui lui est posée à ce sujet qu'il s'agit là d'un élément crucial, de nature à remettre en cause le principe même de la réduction du temps de travail convenue. En principe, lorsqu'on réduit son activité professionnelle, c'est pour disposer de son temps différemment, et non dans le but d'obtenir une compensation financière d'une assurance publique. Cet élément peut bien évidemment, selon la situation, entrer en ligne de compte dans la pesée des intérêts, mais il n'y a objectivement pas lieu d'y voir un élément essentiel selon le principe de la bonne foi en affaires. En l'espèce, il n'y a pas d'erreur de base au sens de l'<ref-law>. L'intimée s'est trouvée dans l'erreur quant à l'incidence de la convention sur ses droits à l'assurance-chômage; il s'agit là d'une erreur sur les motifs du contrat (<ref-law>), qui n'est pas essentielle.
Le grief tiré d'une violation de l'<ref-law> est fondé, de sorte que la question d'une violation de l'<ref-law> soulevée par le recourant en relation avec le raisonnement qui précède peut demeurer ouverte.
Il s'ensuit que l'affaire doit être renvoyée à la cour cantonale afin qu'elle détermine s'il y a eu accord des parties sur la réduction du taux d'activité de l'employée, lequel serait passé de 100 à 20% à compter du 1 er octobre 2014, comme le recourant le soutient. Le cas échéant, l'autorité cantonale devra tirer les conséquences qui s'imposent s'agissant de l'indemnité due à l'employée sur la base de l'<ref-law>, du salaire auquel l'employée peut prétendre durant la période correspondant à son incapacité de travail pour cause de maladie et au délai de congé consécutif à la résiliation de son contrat, comme de l'indemnisation des jours de vacances qu'elle n'a pas eu le loisir de prendre avant le terme de son contrat de travail. Elle déterminera également dans quelle mesure la Caisse cantonale de chômage est subrogée à l'intimée. Tous les griefs en relation avec les points énumérés ci-dessus peuvent ainsi souffrir de demeurer indécis.
5.
Demeure un pan du litige qui est indépendant de ce qui précède: il s'agit de la créance de l'employée relative au différentiel entre le salaire annoncé sur les fiches de salaire et celui effectivement perçu de janvier à septembre 2014. Cette période est en effet antérieure à l'hypothétique accord concernant la réduction du taux d'activité de l'employée.
5.1. La cour cantonale a jugé que l'employeur demeurait débiteur envers l'employée de 2'071 fr.45 à ce titre. Le recourant ne soulève pas de grief spécifique à cet encontre. En revanche, il se prétend titulaire d'une créance contre l'employée, qu'il a invoquée en compensation. Selon le recourant, les juges précédents auraient écarté l'exception de compensation en violation du droit.
Selon la cour cantonale, l'employeur avait invoqué la compensation avec une créance qu'il détenait contre l'employée en versement de sa part aux frais du ménage, d'un montant de 2'500 fr. par mois. Il avait opposé une créance compensante de 10'000 fr. en première instance, alors qu'il l'avait chiffrée à 11'500 fr. en appel. Il était toutefois inutile de déterminer s'il pouvait ainsi en augmenter le montant. En effet, il n'avait pas démontré que la condition spécifique imposée par l'<ref-law> était remplie, à savoir que la débitrice était en mesure de financer son minimum vital et celui de son enfant sans la totalité de son salaire, alors que le fardeau lui en incombait. L'exception de compensation devait ainsi de toute manière être rejetée.
5.2. Le recourant fait grief à la cour cantonale d'avoir violé l'<ref-law> en considérant qu'il assumait le fardeau de la preuve de l'absence d'atteinte au minimum vital de l'employée. Il discerne également une violation de l'<ref-law> en ce sens que l'employée n'aurait à aucun moment invoqué une semblable atteinte. Selon lui, il serait "douteux" qu'elle existât. Enfin, la restriction affectant les possibilités de compenser ancrée à l'art. 125 al. 2 et à l'<ref-law> ne vaudrait que pour le salaire, et non pour les indemnités dues en cas de licenciement abusif ou pour les vacances non prises.
5.3. Aux termes de l'<ref-law>, l'employeur peut compenser le salaire avec une créance contre le travailleur uniquement dans la mesure où le salaire est saisissable. En d'autres termes, la compensation n'est pas possible si le salaire est insaisissable. Lorsque la créance compensante consiste en un salaire, la compensation est ainsi soumise à une condition. Savoir qui supporte le fardeau de la preuve du caractère insaisissable de tout ou partie du salaire se détermine sur la base de l'<ref-law>. Selon cette disposition, chaque partie doit, si la loi ne prescrit le contraire, prouver les faits qu'elle allègue pour en déduire un droit. Contrairement à ce que paraît inférer la cour cantonale, il ne s'agit pas ici d'un fait générateur du droit à la compensation qu'il appartiendrait à l'employeur de démontrer, mais d'un fait qui fait obstacle à celle-ci, soit un fait dirimant. Le fardeau de la preuve de cette condition repose dès lors sur l'employée, qui dispose d'ailleurs de tous les éléments pour apporter cette preuve.
Il appartenait ainsi à cette dernière de démontrer que tout ou partie de son salaire était insaisissable. En faisant supporter à l'employeur l'échec de la preuve corrélative, la cour cantonale a méconnu les règles sur le fardeau de la preuve. La cause doit dès lors lui être renvoyée afin qu'elle tranche la question demeurée ouverte de la recevabilité de l'exception de compensation et qu'elle en tire les conséquences s'agissant du solde dû en faveur de l'intimée.
6.
Sur le vu de ce qui précède, le recours est irrecevable en tant qu'il concerne le certificat de travail, objet du chiffre V du jugement de première instance confirmé en appel. Pour le surplus, le recours doit être admis; l'arrêt attaqué sera annulé et la cause sera renvoyée à la cour cantonale afin qu'elle se prononce à nouveau sur les postes litigieux.
Le recourant obtient gain de cause dans la mesure où l'arrêt qu'il attaque est annulé pour l'essentiel. Dans ces circonstances, il se justifie de mettre les frais de la procédure pour trois quarts à la charge de l'intimée et pour un quart à la charge du recourant (<ref-law>). La même clé de répartition sera appliquée à la prise en charge des dépens (art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est irrecevable dans la mesure où il tend au rejet de la conclusion de la demande en délivrance d'un certificat de travail conforme à l'<ref-law>.
Pour le surplus, le recours est admis et l'arrêt attaqué est annulé; la cause est renvoyée à la cour cantonale pour nouvelle décision au sens des considérants.
2.
Les frais judiciaires, arrêtés à 2'000 fr., sont mis pour 1'500 fr. à la charge de l'intimée et pour 500 fr. à la charge du recourant.
3.
L'intimée versera au recourant une indemnité de 1'250 fr. à titre de dépens réduits.
4.
Le présent arrêt est communiqué aux mandataires des parties, à la Caisse cantonale de chômage et à la Cour d'appel civile du Tribunal cantonal du canton de Vaud.
Lausanne, le 2 septembre 2019
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann