Partly because I'm lazy and partly because I came away from the conference disillusioned and disheartened, I haven't posted my notes about DevLink (a .Net conference I went to several weeks back near Nashville, TN) like I did awhile back for the local Ruby conference (the Ruby Hoedown). I know you've been holding your breath for my insightful impressions, so I'm sorry for the delay.
Recently I've toyed with the idea of stepping away from developing in .NET and with Microsoft tools. Sure, there's a lot of good stuff they provide for developers, but the monopoly thing and their clunky reputation starts to grind on you after awhile. However, I'm not sure if that's realistic, and maybe I'm too entrenched. Or maybe not. Ehhh.
Nevertheless, it's nice to be in a development community that you can look up to and that gives you a good feeling inside.
Did I get a good feeling going to DevLink? Certainly not. It was more of a icky, awkward feeling - like walking in on your grandparents making love.
Why? Well it wasn't all bad. There were some good presenters that gave me interesting perspectives. It's just that there were a lot of uninspiring talks too that made me question if I'm in the right place with my career.
But, I'm just an inexperienced douche bag and it was just one conference in one particular place.
The highlights of Day 1 were the disappointing keynote that caused a flurry of negative comments on Twitter and several people to abandon it. On a more positive note, there was a well-delivered and knowledgeable talk by .Net Rocks host Richard Campbell about scaling ASP.NET and and a look at a functional language that's being pimped a lot lately by Redmond.
Keynote: Stranger in a Strange Land
- [The big deal about this presentation was the twitter feedback that was present. People voiced their displeasure. Saw which people were participating on Twitter]
- What is outsourcing? Outsource developing and/or test. To even multiple companies.
- Immediately I’m struck by how dense the presentation slides are. Shouldn’t have this much information on slides? Can’t pay attention to what he’s saying (there’s even an animated gif in his slide header!).
- How did outsourcing arise? The bubble, people sought to reduce costs. Also to take advantage of resources present in a different geographical region. Labor and cost savings. Inability to handle in-house.
- Unspoken reasons: peer-pressure (everyone’s doing it), and dissatisfaction with in-house business.
- How to deal with it?
- Chaos does not scale!
- Outsourcing greatly increases complexity.
- Like any complex endeavor, careful planning, organization, and closely managed execution are key.
- Lifecycle / process choices? I’m agnostic. Just have one, and stick to it (but still think about it).
- Take quality beyond CMM
- CMM can be used as a marketing device
- It does not say much about testing (even a CMM Level 5 org can score low in test maturity!).
- Plan for and manage project risks. Working with dev teams in certain regions can be influenced by politics (wars).
- Being there
- Do you trust people you’ve never met?
- Do you really hear the whole message when you don’t talk face to face?
- Conference calls and email work for routine communication
- But, sometimes only a visit will do
- Need to adapt to the cultures
- Conclusions: outsourcing is here to stay. It might be cheaper, but it’s harder and more complex (and thus riskier).
Gathering Business Requirements
- Many projects don’t take the time to define requirements enough.
- Requirements: fill in the details of scope.
- Very important to define what details are not part of scope.
- When a new requirement emerges, check to see if it’s in the scope.
- There are non-functional requirements such as how it looks, aesthetics.
- There are also false requirements such as vague requirements, opinions, technology decisions (“Let’s use an Oracle database on this project”, “This application needs to run on the intranet.” – why??)
- Use cases. “A user does an action and something happens”.
- Requirements development. I ask questions, you talk, I listen. I analyze, ask follow-up questions. I document, ask follow-up questions, we all agree. Can take months, years. Is very hard work.
- [He emphasized being very stringent and thorough]
- [Someone asks how you can estimate requirements gathering though, if it can take so much time. His answer was "come see my other talk on so and so".]
- Techniques for elicitation.
- One on one interviews
- Group interviews
- Follow people
- Validation (make sure requirements from Elicitation are accurate)
- Consolidate the requirements.
- Put similar requirements together.
- Determine if you have a complete picture or if gaps are present.
- Eliminate requirements that are out of scope.
- [For me, sounds good in theory, but it just seems nebulous. I would need to be in an environment that values good requirements gathering and physically implements it and has a process to get a feel for what he’s describing. I just can’t relate well enough. It seems too hard to get it right.]
- [Still too much text in slides.]
- Make signoff a formal process.
- Someone asked how to test WinForms or WPF apps at the moment. These are more opaque than HTML testing. Do WinForms and WPF represent inferior ways to dev apps?
Scaling ASP.NET Web Apps
- Scaling means that the page behaves the same as concurrent users increase. The page is consistent as the number of users scale. We can even sacrifice the performance of a single page to improve consistency for users.
- IE 7 does 2 requests at same time. FF does 2. http spec specifies 2. IE 8 will do about 6.
- Web browser makes a request, then gives back data (TTFB), but the page still has to request CSS, JS, and images (2 simultaneously).
- Websiteoptimization.com analyzer
- Latency matters
- Decomposing the problem. Server compute time, client compute tiem, bandwidth, concurrent connections, latency (http ping time).
- Performance spreadsheet and formula.
- Make sure you’re working on the right problem!
- Consolidating JS and CSS cuts down on round trips.
- In a perfect world, we should have 4 files: 1 for html, 1 JS, 1 for CSS, and 1 image (using CSS sprites).
- Server compute time is, in the end, the thing that doesn’t scale and is genuinely a problem (but make sure you’re working on the right problem and not choking on something else).
- Set cache refresh? Don’t do too often (or else you loose the benefit), but maybe once a day.
- Everyone has too much content on slides!! No presentation zen that I saw.
- ASP.NET’s signature problem is memory consumption.
- ASP.NET comes under load, memory runs out, GC kicks in, asp.net tells IIS to hold all requests, IIS stacks up requests.
- Everyone wants 100% of everything (uptime, accuracy, scalablity). But you really need to do what’s important to the business (e.g. For a bank, it’s much better to do nothing, than to do a transaction incorrectly).
- Dell 1950 = 250 req/sec (untuned asp app)
- It’s important to have communication between development and IT so each one is aware of the other’s world and is respectful.
- Lots of people are saying they can do a better garabage collection algorithm, but they have yet to prove it. There are very smart people working on this at Msft. It’s easy to criticize decisions made in 2000, 8 years later.
- Tech politics. When a business is successful, you tend to get cowboys who say they they wan to improve things (aka circumvent the procedure).
- It’s hard to do good, accurate load testing.
- Focus on actual user perf problems. What is reality.
- Start with low hanging fruit.
- Use methodical perf improvement.
- At large scale the network is the computer.
Open Space - Distributed Source Control Management
- Is Svn good enough?
- What's the compelling reason to move to Git? I just got people off SourceSafe to Svn, and now I have to explain DSCM and branching?
- A big reason is private commits.
- Git is great for feature work.
- Why suddenly have so many people moved to Git? GitHub. The fact that people have moved to RoR means that they're alternative thinkers, so they're already receptive to Git.
- Bazaar. Friendlier to Windows? Bazaar, Mercurial and Git
- You can start using Git by using it just like Svn, then slowly introducing branches.
- Workflows detailed on the Bazaar and Mercurial site.
- Will eventually Msft get there? You can already do TFS shelves (even though they reside on the server).
- If you are in an environment that's not receptive to these changes, then you have 2 choices (change your environment or live with it).
- There seems to be a real danger of people being afraid to commit because they're committing publicly.
- Is Git a cargo cult?
Ted Neward and Amanda Laucher
- Don Syme did it. Also did generics. Was made syntax compatible with OCaml.
- Official post by Somar saying F# was going to be productized.
- Very sparse designer support for it.
- Might be useful to learn F# because it's like Erlang?
- Strongly typed, statically-types, but type inferenced.
- "Full benefits of C# or Java without all the high ceremony."
- Room is packed - lots of people interested in functional programming maybe.
- SETI at home was one of the first large scale exercises in functional computing.
- Functional unit testing is isolated, simpler.
- Has both a compiler and interpreter.
- The "let" F# construct
- This is a silly talk, unfocused, too much quasi-entertainment and fluff.
- People seem very dependent on intellisense, or maybe this is just background compilation they're relying on.
- Very funky syntax.
- let myfunction x y = (x * x) + y
- Where x and y are parameters to the function.
- The idea of tuples. They combine values into packets. Think of them as a row from a table. Where a row can have columns with different types.
- Because it has to compile to IL, is it a leaky abstraction?
- One of the dangers of an inferred language is that it can be inferred incorrectly.
- There's the equal operator, then there's the <- destructive update operator.
- ' operator
- This talk is masturbatory.
- The plan is F# will set on top of Parallel LINQ stuff which will interface with VM and OS to scale across processors.
- Was mind blowing to see this bizarre syntax.
- Relation to "yield" keyword in C# (amount other things like delegates and lambdas).