SlideShare a Scribd company logo
Challenges of managing
CoreFX repo
@dotnetfringe 2017
by Karel Zikmund (@ziki_cz)
What is CoreFX repo?
• https://github.com/dotnet/corefx
• Core Framework of .NET Core
• BCL (Base class libraries) – 50 namespaces:
• System.Collections
• System.IO
• System.Linq
• System.Data
• System.Net
• System.Reflection
• System.Runtime
• System.Xml
• and more …
• Not included:
• ASP.NET Core
• WCF, EF
• Namespaces, which are not part of .NET Core (e.g. UI / System.Xaml)
Who are people behind CoreFX repo?
• CoreFX team (20 engineers)
• 10 satellite teams (~20 engineers)
• Beyond .NET Core:
• .NET Framework
• .NET Native (UWP)
• More teams form E2E
• Runtime/JIT, infrastructure, CLI, SDK, project system, NuGet, VS, etc.
.NET Fringe 2017 - Challenges of Managing CoreFX repo -- Karel Zikmund
.NET Fringe 2017 - Challenges of Managing CoreFX repo -- Karel Zikmund
Karel Zikmund
• Engineering manager on CoreFX team
• .NET team since 2005
• https://github.com/karelz
• https://twitter.com/ziki_cz
• Goals:
1. Behind the scenes knowledge = better collaboration
2. Seeking feedback, alternatives, ideas
Issues and PRs
• Incoming last month: 600 issues, 700 PRs
• Notifications: guess 10K+ (300+ per day)
Slicing large repo
• Area labels
• Tooling – incoming / outgoing
• Per area / query
• Limitations (no replies, user-configuration, etc.)
• Similar problem for community:
• New issues/PRs into Twitter feeds @corefxissues
• Similar tooling exists …
octobox.io
Next gen tooling
• https://github.com/karelz/GitHubIssues
Triage rules
1. One area-* label
2. Empty Assignee
3. Use up-for-grabs with next steps & complexity description
4. Set Milestone as 95% commitment
5. One issue type label
• bug / enhancement / api-needs-work / documentation, etc.
6. Don't be afraid to say no, or close issues - just explain why and be polite
7. Don't be afraid to be wrong - just be flexible when new information
appears
Adding new APIs
• ~100 unique APIs in .NET Core
• Dictionary.GetValueOrDefault
• Decision tree:
• Is it existing BCL type?
• Will it be used by CoreFX itself?
• Can it live somewhere else? (PowerCollections)
• API approval process is slow by design
• APIs are forever
Changes
• Performance changes
• Performance trade-offs
• Code complexity vs. value
• Compatibility breaking changes
• vs. 1.x or .NET Framework / UWP / Mono
• Is the value worth the risk someone will get hurt?
• API usage
• Obsolete APIs
• TreatAsWarnings = breaking change
API usage information / telemetry
Team Culture Changes and Challenges
• Discussions in the open
• Onboarding new contributors (docs, tooling, attitude)
• Communication – polite, welcoming, patient – making it constructive
• Unclear language (e.g. ESL = English as Second Language)
• Missing/incomplete/complex repro steps
• Frustration
• Abuse (aggressiveness)
• Own opinion vs. driving consensus
Plans
• Dialog with CoreFX contributors (standups)
• CLR Foundations Talks videos
Thank you
Seeking:
• Feedback
• Alternative / existing solutions
• Ideas (incl. above & beyond CoreFX, Microsoft)
Karel Zikmund
• karelz@microsoft.com
• https://github.com/karelz
• https://twitter.com/ziki_cz

More Related Content

.NET Fringe 2017 - Challenges of Managing CoreFX repo -- Karel Zikmund

  • 1. Challenges of managing CoreFX repo @dotnetfringe 2017 by Karel Zikmund (@ziki_cz)
  • 2. What is CoreFX repo? • https://github.com/dotnet/corefx • Core Framework of .NET Core • BCL (Base class libraries) – 50 namespaces: • System.Collections • System.IO • System.Linq • System.Data • System.Net • System.Reflection • System.Runtime • System.Xml • and more … • Not included: • ASP.NET Core • WCF, EF • Namespaces, which are not part of .NET Core (e.g. UI / System.Xaml)
  • 3. Who are people behind CoreFX repo? • CoreFX team (20 engineers) • 10 satellite teams (~20 engineers) • Beyond .NET Core: • .NET Framework • .NET Native (UWP) • More teams form E2E • Runtime/JIT, infrastructure, CLI, SDK, project system, NuGet, VS, etc.
  • 6. Karel Zikmund • Engineering manager on CoreFX team • .NET team since 2005 • https://github.com/karelz • https://twitter.com/ziki_cz • Goals: 1. Behind the scenes knowledge = better collaboration 2. Seeking feedback, alternatives, ideas
  • 7. Issues and PRs • Incoming last month: 600 issues, 700 PRs • Notifications: guess 10K+ (300+ per day)
  • 8. Slicing large repo • Area labels • Tooling – incoming / outgoing • Per area / query • Limitations (no replies, user-configuration, etc.) • Similar problem for community: • New issues/PRs into Twitter feeds @corefxissues • Similar tooling exists …
  • 10. Next gen tooling • https://github.com/karelz/GitHubIssues
  • 11. Triage rules 1. One area-* label 2. Empty Assignee 3. Use up-for-grabs with next steps & complexity description 4. Set Milestone as 95% commitment 5. One issue type label • bug / enhancement / api-needs-work / documentation, etc. 6. Don't be afraid to say no, or close issues - just explain why and be polite 7. Don't be afraid to be wrong - just be flexible when new information appears
  • 12. Adding new APIs • ~100 unique APIs in .NET Core • Dictionary.GetValueOrDefault • Decision tree: • Is it existing BCL type? • Will it be used by CoreFX itself? • Can it live somewhere else? (PowerCollections) • API approval process is slow by design • APIs are forever
  • 13. Changes • Performance changes • Performance trade-offs • Code complexity vs. value • Compatibility breaking changes • vs. 1.x or .NET Framework / UWP / Mono • Is the value worth the risk someone will get hurt? • API usage • Obsolete APIs • TreatAsWarnings = breaking change
  • 14. API usage information / telemetry
  • 15. Team Culture Changes and Challenges • Discussions in the open • Onboarding new contributors (docs, tooling, attitude) • Communication – polite, welcoming, patient – making it constructive • Unclear language (e.g. ESL = English as Second Language) • Missing/incomplete/complex repro steps • Frustration • Abuse (aggressiveness) • Own opinion vs. driving consensus
  • 16. Plans • Dialog with CoreFX contributors (standups) • CLR Foundations Talks videos
  • 17. Thank you Seeking: • Feedback • Alternative / existing solutions • Ideas (incl. above & beyond CoreFX, Microsoft) Karel Zikmund • karelz@microsoft.com • https://github.com/karelz • https://twitter.com/ziki_cz

Editor's Notes

  1. .NET Core together with CoreCLR repo
  2. 6 teams further away (aligning challenge) .NET Framework – imagine number of satellite teams
  3. Goes both ways Mono linker Netstandard 2.0
  4. Trivia (not so much known): Mono = monkey in Spanish
  5. CoreFX team, open-source – 1 year * Beside Networking, Security, Collections and few smaller areas * Community manager Humans on the other side, not just large corporation with infinite resources
  6. Issues are not only external, we have test issues from test lab PRs are also from team members Notifications limitations – no label changes, no milestone changes
  7. Area labels are per namespace Each area has owner / owners Area owners manually subscribe to issues/PRs Helps engineers to focus Limitations: You have to subscribe manually to get replies No configuration / web UI
  8. Mail inbox (important / deleted) Filters per repo, kind of notifications Great for many repos together, not designed for large repo slicing Limitation: Uses only GitHub notifications – missing: per area-label / GH query scoped Andrew Nesbitt – maintainer of the repo
  9. Designing the tooling with help from community
  10. Trade-offs – rarely clear win. How do you choose which scenario to compromise. Have to thin about all scenarios.
  11. Discussions in the open – it is easier to talk than to write (API reviews) Docs – Microsoft employees know how to take the pain * Repro steps – minimal repro * Frustration – you didn’t invest in last 10 years * Abuse – You have to fix it, swearing/anger, attacks on team members / other community members