Julianne Potter (Julia Roberts), a 27-year-old New York City restaurant critic, receives a call from her lifelong friend Michael O'Neal (Dermot Mulroney). In college, the two made an agreement that if neither of them were married by the time they turned 28, they would marry each other. Three weeks before her 28th birthday, Michael tells her that in four days, he will marry Kimmy Wallace (Cameron Diaz), a 20-year-old University of Chicago student from a wealthy family.
Julianne is disappointed that Michael will marry someone so wrong for him, and someone he has known for such a short period of time. She realizes that she is in love with Michael, and heads to Chicago, intent on sabotaging his wedding. Soon after arriving she meets Kimmy, who asks her to be the maid of honor. This sets off a subplot in which Julianne must pretend to be the dutiful maid of honor while secretly scheming ways to prevent the wedding from happening. She engages in petty sabotage for example, taking Kimmy and Michael to a karaoke bar after discovering that Kimmy is a terrible singer and later asks her gay friend and editor George Downes (Rupert Everett) to pretend they are engaged, hoping to make Michael jealous.
When these tactics fail, George persuades Julianne to do the obvious: tell Michael she is in love with him. One morning, Michael gets Julianne alone and tells her that it'll be the last time they ever get to be alone. He expresses some skepticism in marrying Kimmy, explaining that he and Kimmy don't share a special song like he and Julianne do. Michael discreetly gives Julianne the invitation to tell him she's in love with him, but she lets the moment "pass her by." Michael starts singing their song as he grabs Julianne and holds her while they dance one last time. Julianne s unauthorized use of Kimmy s father s computer to forge an email message to Michael s employer causes further problems for Michael and Kimmy, to the point where they are on the verge of calling off the wedding.
The next morning, the day of the wedding, Julianne tries to sabotage the situation further; as Michael and Kimmy are not speaking to each other, they communicate through Julianne, not realizing she is trying to manipulate them into breaking up for good. In spite of this, Michael and Kimmy decide they do love each other and want to get married after all. Julianne and Michael then take a walk, with Julianne finally confessing her love to Michael. She asks him to marry her instead, and passionately kisses him. Kimmy witnesses this, and runs off, but Michael chases her.
Julianne pursues him, but finally realizes Michael loves Kimmy. Julianne finds Michael at Chicago Union Station, where he is looking for Kimmy, and confesses all to him. Despite his anger at her deception, Michael forgives Julianne, and they split up to look for Kimmy. Julianne then tracks down Kimmy in the bathroom of Comiskey Park (Kimmy's family has a private viewing box at the stadium). Kimmy, rightly furious with Julianne, confronts her. To which the other women watch, immediately siding with Kimmy and are disgusted with Julianne's dirty tactics. Julianne, however, apologizes and explains to Kimmy that she kissed Michael unexpectedly, but he didn't kiss her back because he was in love with Kimmy. Julianne declares that Kimmy has won, and that she accepts Michael's decision. Kimmy and Julianne reconcile with each other.
After the wedding, at the reception, Julianne tells Michael that he and Kimmy can use their special song until they find one of their own, essentially acting like a true best friend. Julianne wishes them well, and she and Michael share their goodbyes, both of them finally moving on with their lives. Later, Julianne is surprised by George showing up at the wedding reception. The movie ends with the two of them happily sharing a dance together on the dance floor.
Output: Why does Julianne say Michael didn't kiss her back?