The Eagles kept their playoff hopes very much alive with a 23-20 win Sunday over LeSean McCoy and the Bills. The outcome did very little to settle the debate over whether Chip Kelly should have traded the former Eagles running back, or if he successfully replaced him. But McCoy was kept in check, especially in the second half, and left the Linc in a sour mood. The Eagles, meanwhile, escaped with a squeaker and move on to a game against the Cardinals. Here's what we learned:

1. The Eagles are playing like a team that controls its own destiny. No matter how the season ends, even if the Eagles were to lose their final three games, Kelly got his team to respond after the worst stretch of his coaching tenure and win two games over a very good team and a decent one. That is to be commended and surely puts to bed any doubts there were about Jeffrey Lurie bringing Kelly back next season.

While the Eagles needed two special-teams returns for touchdowns and another on defense to beat the Patriots last week, they won in more conventional fashion Sunday. It was their "cleanest" effort since the Cowboys victory in early December. They had only one turnover – a questionable one – and only five penalties vs. the Bills' 15. The Eagles have been on the opposite side of that ledger for most of the season.

There were still mistakes aplenty. There were at least four dropped passes and some missed tackles. But there was more solid than sloppy football. The Eagles will need to be more error-free Sunday vs. 11-2 Arizona. They don't necessarily need to win. If they win their final two games against the Redskins (6-7) and Giants (5-7, and at the Dolphins tonight) they will clinch the NFC East even if they finish with the same record as either team.

But if they were to split the last two, they might need an additional "W" over the Cardinals. So they'll play to win on Sunday, of course. Not that Kelly would have it any other way.

2. Despite reports that DeMarco Murray would be buried on the depth chart, he was very much a part of the running back rotation. The days of Murray being the lead ball carrier are apparently over. Kelly said the Patriots' bigger linebackers had something to do with Murray getting fewer touches than Darren Sproles or Kenjon Barner last week. And Murray did get significantly more snaps (25) and touches (13) than Barner (5 and 0) this week, but Sproles played more (27 snaps) and Ryan Mathews (20 snaps) had more touches (15) against the Bills.

For the most part, it was a more democratic distribution of playing time among the top three running backs. Sproles led the team with seven carries for 41 yards (5.9 avg.). Mathews picked up 38 yards on 13 totes (2.9 avg.). And Murray rushed 11 times for 34 yards (3.1 avg.). Sproles also scored from a yard out after an impressive 15-yard scurry. All three struggled to pick up yards on swing passes (a combined six catches for 11 yards).

I didn't see the point of marginalizing Murray even further or benching him. For one, he's almost guaranteed to be back next season. It would do Kelly no good to just bury a running back who will cost $13 million against the salary cap in 2016. And two, it's not as if Murray has been a complete dud. He still has value and, I argue, is the best downfield receiver of the three.

Mathews, meanwhile, might have been a touch rusty after missing the previous three games because of a concussion.

3. Sam Bradford has been a settling influence. If Riley Cooper hangs onto the first-play bomb, if Nelson Agholor catches two third-down passes, if Zach Ertz doesn't take his eye off another third-down throw and if Brent Celek snares a difficult but catchable pass, Bradford's numbers (23 for 38 for 247 yards and a touchdown with one interception) would look different. But that's football, as they, and statistics hardly tell the whole story.

Bradford's passes were pretty much where they needed to be all day. His lone major mistake could have been costly. He took an ill-advised sack for a 15-yard loss late in the game. He was probably worried about stopping the clock, but the two-minute warning was coming anyway. He needed just to throw the ball away outside the pocket.

But aside from that momentary brain freeze, Bradford was sharp. The deep toss to Cooper was right where it needed to be. He did an excellent job throwing to space and letting Agholor run under a 53-yard touchdown. And he had a number of accurate touch passes to Ertz (5 catches for 98 yards) and Jordan Matthews over the middle.

In his last four starts, Bradford has completed 80 of 123 passes (65 percent) for 898 yards, has thrown five touchdowns against one interception, and has a 96.9 passer rating. The Eagles are 3-1 in those games, and it should be noted that Bradford didn't finish in the lone loss.

4. Eric Rowe continues to impress. In his second career start, Rowe looked the part. He is essentially locked into one of the two outside-cornerback spots and will likely return next season as the starter opposite Byron Maxwell. While he didn't exactly face top-flight outside-receiver talent last week against the Patriots, he had his hands full this week vs. Sammy Watkins. The Bills receiver caught a few underneath, but Rowe never let the dangerous Watkins get behind him. Maxwell did when matched up against Watkins, and the result was a 47-yard touchdown.

Rowe will need to work on his man-press technique moving forward. But he already has good ball skills and is a sure tackler. He'll be tested by Cardinals quarterback Carson Palmer and receiver Larry Fitzgerald.

Speaking of young defensive backs, Ed Reynolds has gone from perennial practice-squad player to a contributor on defense. He played 38 snaps Sunday as the nickel safety. His interception of Tyrod Taylor nailed down the game. He actually had a more impressive play when he tackled the scrambling Taylor in the open field in the fourth quarter.

5. Kiko Alonso showed mild improvement. It has been a rough go for the inside linebacker since he returned from arthroscopic knee surgery. Kelly has said publicly that Alonso still isn't 100 percent. He played most of the snaps at his position last week and appeared to wear down late.

Snap distribution against the Bills was more evenly doled out. DeMeco Ryans played 47 of a possible 74 snaps, and Alonso and Mychal Kendricks played 42 apiece. Alonso was effective on running downs. He appeared to flow toward the ball with better instincts. He finished with five tackles. He did get caught running out of his gap in the third quarter when Bills running back Mike Gillislee scooted up the middle for a 19-yard touchdown.

The Bills lost a key component of their offense when tight end Charles Clay left with an early injury. But Alonso and the other inside linebackers seemed to fare well in coverage.

6. Special teams. For the second straight week, the Eagles won special teams. Dave Fipp's units are starting to reach last week's peak. The kick and punt cover teams were outstanding mostly because of the legs of kicker Caleb Sturgis and punter Donnie Jones. Five of Sturgis' six kickoffs weren't returned. The Bills' lone kick return netted just five yards.

Jones was outstanding. He averaged 50.4 yards on seven punts and had a 43.3-yard net. His longest was 63 yards. A 52-yard boot was muffed by Marcus Thigpen and Bryan Braman recovered. The Eagles scored a touchdown off the change of possession.

Sturgis was 3 for 3 on field-goal attempts. He hit 45- and 41-yard tries before connecting on the 30-yard game-winner. As for the return units, Sproles picked up 28 yards on a punt and averaged 11.8 yards on four returns. Josh Huff wasn't as effective as kick returner and still has shaky moments. He averaged 18.7 yards on three tries.

7. Zach Ertz may be the Bradford's best receiving option. Jordan Matthews is certainly in that conversation, but he has been quiet lately. He lined up more on the outside on Sunday, it appeared, but he didn't have a catch out of that spot. Matthews is averaging 3.2 catches for 29.8 yards in the five games since he helped beat the Cowboys (9 catches for 133 yards and a touchdown). He does have two touchdowns over that span.

But back to Ertz. He was starting to get into a groove before suffering a concussion against the Buccaneers. He averaged 5.2 catches for 55.6 yards in the five previous games. He didn't have a touchdown this season until last week's grab against New England. But he hit a season high with 98 yards receiving on Sunday. His 41-yard catch and run set up the game-winning field goal.

The Bills kept playing a lot of zero coverage, and I kept thinking that if one of the Eagles could break a tackle, it could be off to the races. The Bills tackled well for the most part, but on that play, Ertz ran over cornerback Leodis McKelvin and rumbled to the Bills' 18. Ertz presents the greatest mismatch advantage for the Eagles. Getting him more involved down the stretch will be beneficial.

8. Fletcher Cox is among the best defensive players in the NFL. Rex Ryan and guard Richie Incognito had high praise for Cox after he blew up a good deal of the Bills' plans on offense. I wrote more about Cox's day in my column for the newspaper.

But I will add this: He deserves every ounce of recognition he might get. Despite playing in a scheme that doesn't necessarily play to his strengths or allow him to put up the sack numbers he is probably capable of generating, Cox still can't be silenced. It's amazing to think that he just turned 25 on Sunday. Can he possibly get better? Scary.

9. Nelson Agholor has the ability. He's a rookie. He missed three games with a high ankle sprain. He was being asked to play far more snaps than necessary. Agholor hasn't been the first-round receiver many had hoped for in Year 1. But the fact is most receivers don't come into the NFL and make instant impacts. Last year's draft with arguably the best crop of receivers ever was an anomaly.

Agholor needed time that the Eagles couldn't afford because the rest of the outside receivers haven't been effective. The injury didn't help his development. But he made a catch Sunday that should offer hope that he can develop into a consistent downfield threat. He separated from two defensive backs and burst into space for a 53-yard touchdown.

It was the first of his career. Agholor still needs to work on his celebration. And he still needs to work on catching the ball. He dropped two passes for what would have been first downs. But he offered a glimpse of what might be possible.

10. And a few leftovers … The Eagles' offensive line is like night and day with Jason Peters in vs. out. When Peters left with an ankle sprain, Dennis Kelly jumped in at left tackle and was called for holds on back-to-back plays. Peters got his ankle taped and returned, and the o-line kept Bradford clean for most of the day. … Trey Burton continues to get looks on offense. He played four snaps, usually as a blocker on the Eagles' split zone run play. … With Jonathan Krause inactive, Seyi Ajirotutu played four snaps on offense. He even had a target on a deep post. … Marcus Smith played just four snaps on defense.