Faits :
A.
A._ s'est annoncée à l'assurance-invalidité le 20 octobre 2009 en indiquant qu'elle avait subi une ostéotomie et une thyroïdectomie et qu'elle souffrait d'arthrose de la colonne vertébrale. L'Office de l'assurance-invalidité du canton de Genève (l'office AI) a retenu un statut de personne active à 80 %, les 20 % restants étant consacrés aux tâches ménagères. Le docteur B._, spécialiste en médecine interne et rhumatologie, médecin au Service médical régional de l'assurance-invalidité (SMR), a attesté une capacité de travail de 50 % dans toute activité professionnelle tenant compte des limitations fonctionnelles requises par la pathologie ostéoarticulaire, et de 50 % dans une activité adaptée depuis fin 2007 (rapport du 21 janvier 2013). Les empêchements ont été évalués à 40 % dans la sphère ménagère (rapport d'enquête économique sur le ménage du 1 er décembre 2011).
Appliquant la méthode mixte d'évaluation de l'invalidité, l'office AI a fixé le taux d'invalidité à 38 % (30 % pour l'activité lucrative, 8 % pour l'activité ménagère) et rejeté la demande de prestations, par décision du 10 janvier 2014.
B.
A._ a déféré cette décision à la Cour de justice de la République et canton de Genève, Chambre des assurances sociales, en concluant à l'octroi d'une rente entière d'invalidité.
Par jugement du 24 novembre 2015, la juridiction cantonale a porté le taux d'invalidité à 40 %. Elle a annulé la décision du 10 janvier 2014 et reconnu le droit de l'assurée à un quart de rente d'invalidité à compter du 1 er mai 2009.
C.
L'office AI interjette un recours en matière de droit public contre ce jugement dont il demande l'annulation, en concluant à la confirmation de sa décision du 10 janvier 2014.
L'assurée intimée conclut à la confirmation du jugement entrepris, par substitution de motifs, en tant qu'il lui octroie un quart de rente; elle demande que le droit à la rente soit fixé au 1 er avril 2013. L'Office fédéral des assurances sociales (OFAS) a renoncé à se déterminer.
Considérant en droit :
1.
Le litige porte sur le droit de l'intimée à une rente de l'assurance-invalidité, singulièrement sur l'évaluation du degré d'invalidité dans la sphère professionnelle dans le cadre de la méthode mixte d'évaluation de l'invalidité.
Les conclusions de l'intimée tendant au versement du quart de rente à partir du 1 er avril 2013 sont irrecevables. En effet, elles sont tardives (art. 100 al. 1 LTF) et l'intimée n'a pas d'intérêt digne de protection à obtenir moins que ce que la juridiction de recours de première instance lui a alloué (art. 89 al. 1 let. c LTF).
Les premiers juges ont exposé les règles applicables à la solution du litige, si bien qu'il suffit de renvoyer au jugement attaqué (consid. 6 p. 23).
2.
2.1. La juridiction cantonale a constaté que l'intimée a un statut de personne active à 80 % (consid. 9 p. 25 du jugement attaqué). Elle a aussi constaté que la capacité de travail est de 50 % dans une activité lucrative adaptée, tandis que les empêchements à accomplir les travaux ménagers s'élèvent à 40 % (consid. 12 p. 27 in fine du jugement attaqué).
Les juges cantonaux se sont référés au ch. 3101 de la Circulaire de l'OFAS sur l'invalidité et l'impotence dans l'assurance-invalidité (CIIAI). Cette directive prescrit aux organes de l'AI de déterminer le taux d'invalidité comme suit lorsque la méthode mixte est appliquée:
E x lE + ([EZ - E] x H)
----------------------------- = Taux d'invalidité en %
EZ
E = travail fourni par l'assuré en tant que personne non invalide exerçant une activité lucrative, en heures par semaine
lE = handicap rencontré par la personne exerçant une activité lucrative, en %
EZ = durée de travail normale des personnes exerçant une activité lucrative à plein temps dans la branche d'activité concernée, en heures par semaine
H = handicap rencontré dans le ménage, en %
Considérant que le travail fourni par l'intimée en tant que personne non invalide exerçant une activité lucrative atteignait 32 heures par semaine et que la durée normale du travail des personnes travaillant à plein temps dans la branche d'activité était de 40 heures, les premiers juges ont établi le taux d'invalidité de l'intimée à 40 %, résultant du calcul suivant:
32 heures x 40% + [ (40 heures - 32 heures)] x 40%
------------------------------------------------------------------- = 40%
40 heures
2.2. L'office recourant soutient que la prise en compte d'une incapacité de travail de 40 % dans la sphère professionnelle découle d'une violation du droit fédéral. Compte tenu du fait que l'intimée aurait travaillé à 80 % d'un horaire à temps complet si elle avait été bonne santé, soit 32 heures par semaine, et qu'elle n'est plus en mesure de travailler que 20 heures par semaine en raison de son handicap qui limite sa capacité de travail à 50 %, le recourant est d'avis que l'empêchement dans la sphère lucrative est bien de 38 % (recte: 37,5 %) et non de 40 %, puisque le rapport entre 20 heures et 32 heures est de 62 % (recte: 62,5 %). Ce taux induit un degré d'invalidité de 30 % dans la sphère lucrative (80 % de 37,5 % = 30 %). En l'additionnant au taux d'invalidité de 8 % dans les travaux ménagers (20 % de 40 % = 8 %), le degré d'invalidité global est ainsi de 38 %.
2.3. Quant à l'intimée, elle estime que la solution adoptée dans le jugement attaqué (l'octroi d'un quart de rente) doit être confirmée par substitution de motifs, car son taux d'invalidité est de 48 % ou 49 % selon les calculs qu'elle propose.
3.
3.1. De manière à lier le Tribunal fédéral (art. 105 al. 1 LTF), la juridiction cantonale a constaté que l'intimée présente une capacité de travail de 50 % en raison des atteintes somatiques et psychiques dont elle souffre. On doit admettre que l'intimée ne peut ainsi effectuer que 20 heures de travail salarié par semaine, ce qui correspond à la moitié d'un horaire de travail ordinaire à plein temps de 40 heures. A cet égard, il sied de rappeler que les pourcentages d'incapacités de travail se rapportent en principe à une activité professionnelle exercée à plein temps, pour autant que les médecins ne précisent pas expressément - ce qui n'est pas le cas ici - qu'ils se réfèrent à un travail à temps partiel ou que cela ne ressorte du contexte d'une manière claire (cf. arrêt 9C_648/2010 du 10 août 2011 consid. 3.6.3 et les références). En bonne santé, l'intimée n'aurait donc accompli que 32 heures de travail hebdomadaires dans le cadre d'un emploi à 80 %, les 20 % restants étant consacrés à la tenue de son ménage (consid. 2.1 supra).
3.2. A l'instar de l'affaire qui avait donné lieu à l'arrêt publié aux ATF 137 V 334 (consid. 7.1 p. 350), l'intimée rencontre un handicap de 37,5 % (50 % de 80 %) dans l'exercice de l'activité professionnelle, ce qui correspond à une incapacité de gain et non à une incapacité de travail comme la juridiction cantonale l'a retenu (cf. consid. 13 p. 28 du jugement attaqué); c'est en ce sens qu'il faut comprendre la variable IE (ch. 3101 CIIAI). En tenant compte du taux de 37,5 % (la pertinence des autres données n'étant pas contestée), le calcul de l'invalidité doit se faire comme suit:
32 heures x 37,5% + [ (40 heures - 32 heures)] x 40%
---------------------------------------------------------------------- = 38%
40 heures
On ajoutera qu'il n'y a pas de raison de s'étendre sur la question de l'application de la méthode mixte au cas d'espèce, d'autant que celle-ci n'est pas remise en cause.
Compte tenu du taux d'invalidité de 38 %, la décision du 10 janvier 2014 refusant le versement d'une rente doit être confirmée (art. 28 al. 2 LAI). Le recours est bien fondé.
4.
L'intimée, qui succombe, supportera les frais de la procédure (art. 66 al. 1 LTF).
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est admis et le jugement de Cour de justice de la République et canton de Genève, Chambre des assurances sociales, du 24 novembre 2015, est annulé.
2.
Les frais judiciaires, arrêtés à 800 fr., sont mis à la charge de l'intimée.
3.
Le présent arrêt est communiqué aux parties, à la Cour de justice de la République et canton de Genève, Chambre des assurances sociales, et à l'Office fédéral des assurances sociales.
Lucerne, le 14 septembre 2016
Au nom de la IIe Cour de droit social
du Tribunal fédéral suisse
La Présidente : Glanzmann
Le Greffier : Berthoud