Angela Lansbury in Murder, She Wrote and Anika Noni Rose in The No. 1 Ladies Detective Agency.
Photo-Illustration: Vulture, CBS and HBO
In the middle of a worldwide outcry against racism and police brutality, TV is long overdue for a reexamination of one of its most popular and widespread characters: the cop. There’s been criticism of police stories on TV for years, but shows like Law & Orderand Blue Bloods have persisted as not just prominent, but the kind of TV that many viewers turn to when they want something easy and comforting. For people who enjoy them, these shows provide a reliable sense of safety, a repetitive and usually simplified world where problems get solved and heroes prevail.
If you are realizing that you want to watch fewer cop shows, or you never liked them to begin with, there’s a whole world of TV procedurals out there that can scratch the same itch. Some of these shows come with asterisks, because especially in recent years, TV private eyes tend to work hand-in-hand with police. But all of them fulfill the same basic need: Procedural storytelling that emphasizes a perspective other than government-sanctioned law enforcement. The characters in these shows often work outside governmental agencies because they’ve been excluded from those systems. Women and people of color are prominently represented in this genre because they are marginalized voices, and official authority figures don’t recognize their value. It makes these shows even better suited for right now, when a lot of us would do well to check out TV featuring more diverse characters.
Murder, She Wrote
Photo: CBS
If you’re looking for a soothing, long-term relationship with an American procedural — months and months worth of TV to watch, with no fear of running out any time soon — what you need is Murder, She Wrote. Angela Lansbury plays Jessica Fletcher, a retired English teacher and mystery novelist who turns to solving crimes in her small town in Maine. Fletcher does occasionally interact with the police of Cabot Cove, but as with most amateur detectives, they tend to ignore her, frustrated by her pointed questions and attention to detail. Fletcher is among the best of the American private-eye tradition, leveraging her position as an older woman often dismissed by men to find justice for people the police cannot help.
An adaptation of Alexander McCall Smith’s novel series of the same name, The No. 1 Ladies Detective Agency is an HBO series set and filmed in Botswana about Mma Precious Ramotswe, who goes into business as the country’s first female private detective. Her cases are rarely about death. She investigates break-ins, missing pets, stolen cars. They are typically domestic mysteries, but part of the series’ appeal is in how well Mma Ramotswe understands that these are serious, life-changing events for her clients. She often helps women who are disturbed or concerned about their husbands and boyfriends, and she is unrelenting when she encounters unfairness and cruelty. Mma Ramotswe is played by Jill Scott, who’s fantastic in it, and I will never forgive HBO for canceling it after one short season.
The No. 1 Ladies Detective Agency is streaming on HBO Max.
Stumptown
Photo: Jessica Brooks/ABC
This is an entry with an asterisk, because Stumptowndoes feature an occasionally friendly, occasionally antagonistic cop. But it mainly operates in the noir lane. Its protagonist Dex Parios, played by Cobie Smulders, is an ex-Marine with a lot of baggage who decides to support herself and her younger brother by working as a PI. Dex has a police contact who shows up often (and who she sometimes sleeps with), but she sees herself as an entirely independent entity, wrestling with her own moral code. She’s suspicious of the police, and her experience as a veteran has made her skeptical of authority. She’s also best friends with a bartender played by Jake Johnson, so if you’re looking for attractive people who operate outside the broken structures of official justice, Stumptown’s a great option.
The first time I watched this show was at my mother-in-law’s house, and I could not believe it was actually real, but it is, and it’s fantastic. The U.K. has a strong private-eye tradition on TV — if you’re reading this but somehow have not seen David Suchet as Poirot, what are you even doing here? — and Rosemary & Thyme is a classic, in which two middle-aged women (Pam Ferris and Felicity Kendal) are brought together by their love of gardening and crime. They are united by their sense that the world does not treat women well — Laura Thyme is an ex-cop whose husband cheated on her; Rosemary Boxer was pushed out of her academic position as a horticulturist — and although they’re ostensibly a team of gardeners, it turns out you can overhear a lot of secrets and overturn a lot of bodies while you’re digging around in the shrubbery.
This is farther afield than some entries on the list, but one issue with police procedurals is that they all resemble one another, starting with police protagonists and rarely rethinking what episodic storytelling could look like if the main character wasn’t a cop. Quantum Leap is the kind of show you get if you kick off from an entirely different starting point. Sam Beckett, played by the amazing Scott Bakula, is a scientist from the future stuck in an experiment gone wrong, leaping into the bodies of various people throughout history, unable to leave until he addresses some fundamental problem in their lives. Beckett’s work is often against injustice or prejudice, and while the series is definitely dated (it ran from 1989 to 1993), it’s impressive how well the show’s underlying compassion has aged. It’s a procedural from the point of view of Beckett, but the entire purpose of the show is that he’s forced, again and again, to see through other people’s eyes.
Its producers call this show a “forensic fairy tale,” because like Quantum Leap, Pushing Daisies has an explicitly magical premise: Ned (Lee Pace), a pie-maker, has the ability to briefly revive dead people when he touches them, which gives him a unique skill in the murder-mystery space. He works with his childhood sweetheart (Anna Friel) and a private investigator (Chi McBride) to solve murders, and the entire series has the specific mixture of cheerfulness and existential dread shared by other Bryan Fuller shows, including Wonderfalls and Dead Like Me, both of which would also fit well on this list. Ned’s unusual powers also make this show fitting for a moment when you might be looking for cop-free mysteries with strong social-distancing resonance.
Any Michelle and Robert King series would be a good candidates for this list. If you’re yearning for a police-lite procedural like Murder, She Wrote that also has seasons and seasons worth of TV, it’s absolutely worth starting The Good Wife right now. But Evil is an even more appealing, of-the-moment procedural. In the vein of TheX-Files, it features a priest (Mike Colter), a contractor (Aasif Mandvi), and a psychologist (Katja Herbers) who assess possible miracles or demonic possessions for the Catholic Church. Like most of the Kings’s recent work, Evil is particularly aware of the role of race in its storytelling. Its best episode features the priest, who is a black man, trapped in a hospital bed at the mercy of racist, potentially demonic nurse.
Almost any Star Trek series would fit the bill here, and the strongest procedural of the franchise is really The Next Generation. But allow me to echo my colleague Angelica Bastién in recommending Deep Space Nine first and foremost. Slightly less procedural than previous entries in the franchise, it’s the first Star Trek series to do long-arc storytelling, and it has a complex mythology that leads it into fascinating, nuanced plots about faith, territory, destiny, and the tensions between peace and justice. As Bastién wrote in 2018, it’s also one of the most thoughtful and moving depictions of black fatherhood on TV. The fact that DS9 can weave all of that into an episodic rhythm that will absolutely fulfill all your comforting, story-a-week desires makes it the best Star Trek for right now.
• Medium and Ghost Whisperer: Women who can talk to dead people solve crimes and resolve problems.
• Agatha Raisin: With a modern, charming Miss Marple type.
• Monk: Featuring another social-distancing private eye.
• Supernatural: As this series goes on, it gets less procedural and more wrapped up in its own increasingly unintelligible deep mythology. The first few seasons, though, are mostly about two brothers who drive around America to rid the country of monster-of-the-week demons.
• Buffy the Vampire Slayer: The original monster-of-the-week supernatural procedural.
• Doctor Who: Like Supernatural, this series can get way into the weeds on mythology depending on what season you’re watching. Its origins are in a classic fantasy-procedural realm though, as the Doctor shows up somewhere in the TARDIS and solves alien problems in each episode.
• The Split: About a team of sisters who work in divorce law.
• Leverage: A Robin Hood-esque procedural about a team of felons helping people who can’t get justice through the system, often through some not particularly legal methods of redistributing wealth.
• The Heart Guy and Doc Martin: Maybe you’re looking for a more gentle medical procedural?
• Veronica Mars and Terriers: Both of these series break the rules a little, as there are cops throughout their stories and Terriers is only half-procedural at best. But they are the two strongest noir series in the last 15 years, and as a genre that explicitly works against government-sanctioned corruption, trust me when I say we all need some more noir in our lives right now.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(136),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(408),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"408":408,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]