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'art. 330a al. 2 CO. 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'art. 336 CO 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.