Developer Efficiency


Published on

Published in: Technology
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Developer Efficiency

  1. 1. Dmitri Nesterukdmitrinesteruk@gmail.com dnesteruk dmitri.nesteruk
  2. 2. !   Circa ~10yrs in .Net !   C#, F#, Web (HTML+REST), WinForms, etc.!   Founder & co-ordinator @ St. Petersburg Alt.Net User Group (est. 2008, !   Podcast:!   Co-ordinator of the St. Petersburg .Net User Group (Ineta,!   Microsoft MVP – Visual C# (since 2009)!   Developer evangelist @ JetBrains!   Passionate .Net developer/consultant
  3. 3. !   Efficiency = !   How quickly you write code !   How good the code is!   Efficiency is relative !   Relative to how quickly other people code and how good their code is!   This talk is about individual efficiency
  4. 4. !   No !   Business model not conducive (e.g., monopoly) !   Management doesn’t care !   Billable hours (outsourcing, etc.)!   Yes!!! !   Product company !   Start-up !   Company with ‘engineering culture’
  5. 5. !   Intrinsic motivation a.k.a “professionalism” !   “Programming is my pride and joy, I must improve and do things better”!   Extrinsic motivation !   If I do things better, I’ll get more money/respect/casual sex/whatever!   Efficiency is largely individual. Team efficiency is ƒ(individuals).
  6. 6. !   How quickly can you write code? !   Especially mundane code!   How quickly can you !   Compile !   Run tests !   Deploy!   Do you need to recompile to fix a program?
  7. 7. Demo I
  8. 8. !   Mnemonics !   Used to create data structures!   Code gen features !   Create routine code quickly!   Custom-written features, e.g., !   Dispose(), IDisposable ! INotifyPropertyChanged
  9. 9. !   Compilation and testing eats local CPU !   VS2010 and earlier also freezes UI :(!   You need results now, not after check-in!   Single-machine solution: !   Use other (fast) machines to build/test !   Use Dropbox (or similar) to sync !   Build via MSBuild with /m option !   Use a test runner that automatically re-runs tests when binaries change !   E.g., Gallio Icarus
  10. 10. !   Multi-machine solution:!   Compilation: !   Build project dependency graph !   Topological sort !   Run MSBuild on individual projects !   File sync!   Testing: !   Quantize by assembly (DLL), fixture or method !   Execute on separate machines !   Collate results (XML merge) and present!   Existing solutions: IncrediBuild, Electric Cloud
  11. 11. !   What about Continuous Integration?!   Multiple TC configurations on multiple machines !   All will (probably) have to compile everything !   But different agents can run different things!   Difficult to coordinate!
  12. 12. !   Only worth it if !   Cost is high (e.g., compilation time > 5sec.) !   Is automated ! Spolsky’s “Can you make a build in one step?” !   Parallelizable (often, not always) !   Does not have cryptic dependencies, magic artefacts!   Caveat: on remote machines, you lose out on VS integration
  13. 13. Demo II
  14. 14. !   Conditionally show a lightweight editor !   I use ActiPro, so I have some IntelliSense!   Instantiate new component and update usage !   Stick to one-class-per-file rule !   Judicious use of dependency injection!   Write modified source code to original file!   Benefits: !   Eliminate close-recompile-restart cycle !   Preserve memory state !   See new features immediately
  15. 15. !   Code generation - R#, code-gen/UML/MDA tools!   AOP - PostSharp, your own MSBuild post-build task for IL rewriting (via Mono.Cecil)!   Dynamic programming - DynamicMethod, LINQ Expression compiler, DLR! Metaprogramming – Boo/Nemerle, Project Roslyn (post-C#5), D (!) !   Breaks language services (VS, C#)!   DSLs – F#, MPS
  16. 16. !   Do developers have the best tools money can buy? (as per Joel’s Test)!   Tools = !   Best software for development, quality control !   Best hardware for development, compilation/ testing, virtualization, etc. !   Best workspace equipment (here be dragons)!   Do developers make their own development tools?!   Do developers perform R&D on new tools, languages, frameworks?
  17. 17. Demo III
  18. 18. !   IDE, refactoring support !   IDEA, VS + ReSharper!   Code insight tools ! FxCop, NDepend!   Infrastructure tools !   (D)VCS – Git, Mercurial !   Yes, people do host commercial projects on Github !   CI systems – TeamCity, Hudson, CC.Net ! Collabotartion tools – issue tracking, wiki, VSAnywhere
  19. 19. !   Bare minimums !   Modern CPU !   Enough RAM (~16Gb+ as of 2011) !   Laptops notwithstanding !   SSDs (still using HDDs?!?) !   Multiple monitors !   Fast internet connection (duh!..)!   Assume that dev software (e.g., VS) is power- hungry and always expects top-end computers
  20. 20. !   Fast computers allow a lot more intelligence on developers’ machines !   Resource-heavy code analysis !   R# misspelt naming (GPGPU) !   Larger, faster, mode detailed caches !   Fuzz/Monte-Carlo testing/simulation !   Integration tests (VMs etc.)
  21. 21. !   More time is spent on solving problems rather than implementation!   Strong AI ain’t here yet!   Development depends on lots of other things !   Quiet and adequate working conditions (Joel’s Test) !   Sensible management practices !   Whether people are happy with their pay !   … and a lot more.!   YMMV – efficiency may or may note give you anything.!   No substitute for good business model.
  22. 22. !   Questions?!   Answers?!   Hate mail?!   MOAR?!?