Din cauză că nu ai de unde să obții detalii de la toți ceilalți cu care comunici, plus rețeaua până la ei, e aproape imposibil să spui de ce merge cum merge (bine/prost).
Download-ul se face de la zeci de surse, cu lățime de bandă, încărcare și disponibilitate a bucăților (pieces) complet diferită, e clar că nu se poate garanta viteza de download. Prin definiție (descrierea procotolului), transferul e i/o intensive, pentru că se dorește împărțirea cât mai uniformă a bucăților, astfel încât să nu depinzi o perioadă lungă de seeder (care are toate bucățile și e single point of failure, se urmărește maximizarea distributed copies). Un client care trișează la download (ex: prin setarea de priorități pe anumite bucăți/fișiere, sau download-ul în ordine - "streaming" over bittorrent) va avea încărcare i/o mai mică, pentru că poate să scrie bucățile în ordine; dar tot nu poate să facă mare lucru când face upload, pentru că restul de clienți îi vor cere bucăți random => random i/o => întârzieri din cauza stocării. Cum nu prea ai cum să faci caching în memorie la fișiere mari, nu poți scăpa de acest random i/o.
Se poate optimiza prin piece size (atunci când se creează torrent-ul), astfel încât să nu fie foarte mici bucățile (adică nu ai nevoie să faci multe random writes/secundă, ex: 20MB/s la piece size 1MB => 20 writes/sec, piece size 2MB => 10 writes/sec, dacă n-ai noroc și a pus cineva un piece size de 256k => 80 writes/sec), dar pe de altă parte, dacă download-ul nu se termină cu succes la un piece size mare, ai pierdut mult timp de pomană - deci trebuie să existe un echilibru undeva. Cu un seek time uzual pe un HDD de 10-15ms și 20 w/s, numai partea de seek durează 30% din timpul de scriere/citire. Pe urmă mai pot exista limitări de rețea prin diverse locuri (ex: router/firewall), care să nu te lase să deschizi un număr mare de conexiuni dintr-o dată, ISP-ul să facă traffic shaping după cine știe ce criterii, există și conceptul de poisoning, cu clienți care trimit intenționat pachete eronate etc. De exemplu, router-ul meu ajunge la 40MB/s în speedtest.net, dar dacă încerc multe conexiuni în paralel cu viteză mare, mai poate routa doar 30-35MB/s.
Unii clienți încearcă să maximizeze throughput prin păstrarea doar a conexiunilor care au viteză bună, dar asta înseamnă că trebuie să testeze - se conectează la altcineva, iau o bucată, dacă merge prost caută în altă parte - iar astea costă timp la negocierea conexiunilor, transmiterea hărților de pierces și apoi cererea efectivă.