Monday, June 29, 2009
How to Contribute to Open Source (When You're Not Exactly Scott Hanselman)
Sunday, June 28, 2009
Take a Deep Breath
I just got back from an extremely relaxing weekend in different 'burbs than I own with some seriously amazing people. It occurs to me
that we don't do these things often enough (at least I don't). When you start up Skype, the splash screen when loading says "Take a Deep Breath"
What an awesome feature! It always makes me smile,
Speaking of Skype, this past week we did our first WAN party on Ventrilo which is a server dedicated to connecting people It is used
often for gaming. Our connection was much better than usual, however, I fear making this switch will discourage people from coming
to the parties because you DO have to download Ventrilo. Has anyone had a good experience with both hosting many people on a
Skype call and recording it? I have had many issues with Skype since we started, a great tool but for multiple people on a call it stinks.
We have run into a lot of trouble during our calls and that is what makes me want to switch. Can you reccomend a different tool to do these calls? I really
enjoy them and when they work well they are great, but there MUST be a better way.
In other news Girl Developer the news was super fun and will now be a regular feature.
Also, NJ Tech Drinks is coming up soon!!! If you are from the area it would be awesome if you could stop by, or if you
know anyone forward them the invite! I'm really looking forward to it. Link here.
Sunday, June 21, 2009
Monday, June 15, 2009
ASP.NET MVC Translated for the Web Forms Programmer (3 in a series)
Obviously I've been putting this off a little. I think the controller has been haunting me, it's very intimidating. I've become such a good friend to System.Web.UI.Page, it's hard to imagine my life without him. However, we all get older, grow apart. It's time for me (and you) to go head first into the next layer of MVC, we've started our project, set up our model. Now it's time for View -> Controller.
The thing about the controller is, it's a lot like normal code behind. The biggest adjustment? There is no page load. The View gets all its data from the Controller at runtime. There are a few key terms we need to learn. The first one is ActionResult. This is going to be a little confusing so strap in. The Action Result is what each method returns with relation to the View. Each method in the controller that returns data to a view is called an "Action Method"
To demo this we're going to do something super easy, we're going to do some simple math and post the result as a string on our page. Sounds easy? I think so too, don't forget, we're doing this for the first time together.
I must digress for a moment and move over to our global.asax. We're going to look at a method it's called RegisterRoutes and what it does is let our application know how to look at the Urls we're passing it. The way it's set up now, the first term being passed is the name of our controller, MVC now knows what to do with that, and the second term is the name of our Action Method, the third term will be any parameters, and so on. MVC has some serious RESTful goodness, so the RegisterRoutes method shows our application what to look at and where to go when it gets one of our pretty Urls. I left in the defaults, you can customise it for your application, take a look:
Also, before we get started, we need to cover something that's very important in MVC, and that's naming. In order to implement the intuitive functionality of MVC we need a few things to be the same. The name of our controller (plus the word "controller"), and the folder that contains our views related to it (as children of the "Views" folder). Mine is called CapsuleController.cs and My folder is called Capsule. Two more things that need to match are the name of your view, and the name of your action method that returns the view (though not always, it does make things more convenient). Capsule contains a view called Math and we have a an action method in our controller called Math. Take a look at our tree:
This is going to look weird the first time you're looking at it. Our action method is being passed no parameters, this is the action that automatically is called by the controller when our view (of the same name) is loaded. If you have named your view (or action) something different, you can just call View("ViewName") and pass the name of the view you want into your method. When this guy is called we get our page as is, with no data passed in.
Wednesday, June 3, 2009
So, You Want to Come to a WAN Party?
This week we had:
Tonight's WAN party attendees:
Sara Chipps(me)!
James Pendarvis
This weeks topics are: "Do you think technical interviews are beneficial?", "Are comments (and regions) a code smell?", "Google Wave and Bing Buzz"
Please excuse our audio troubles, and my chomping. This is the first time we are publishing. Thanks to everyone who took part. I am including the text chat below the link, so you can follow along if needed, but it should be fine without. The only things you might want to see is Nick Berardi's code snippet which we discuss.
Oh, and the comment I left yesterday: 'This is really ugly code, I will hopefully fix later
I don't know how this comes accross entertainment-wise, feel free to leave suggestions.
[6/3/2009 7:31:04 PM] *** Sara Chipps added Kevin Griffin, Nathan Kelley, Nick Berardi, Norm, Dane O'Connor, Tobin Titus ***
[6/3/2009 7:31:07 PM] *** Conference call, duration 1:34:50 ***
[6/3/2009 7:31:37 PM] Norm: Yeah solid echo
[6/3/2009 7:32:06 PM] *** Sara Chipps added James Thigpen ***
[6/3/2009 7:32:09 PM] Norm: yay trains!
[6/3/2009 7:32:29 PM] Nathan Kelley: Lloyd Humphreys said he's having trouble talking to you sara
[6/3/2009 7:32:40 PM] *** Sara Chipps added Lloyd Humphreys ***
[6/3/2009 7:32:49 PM] Dane O'Connor: omg
[6/3/2009 7:32:52 PM] Dane O'Connor: whats going on?
[6/3/2009 7:33:04 PM] Lloyd Humphreys: hey
[6/3/2009 7:33:16 PM] Nathan Kelley: i thought you got arrested for that kind of stuff
[6/3/2009 7:33:25 PM] Tobin Titus: me too
[6/3/2009 7:33:25 PM] *** Missed conference call. ***
[6/3/2009 7:33:51 PM] *** Call ended ***
[6/3/2009 7:34:30 PM] Dane O'Connor: sounds like we're in an empty staduim?
[6/3/2009 7:34:47 PM] *** Sara Chipps added James Pendarvis ***
[6/3/2009 7:35:11 PM] *** Sara Chipps added brian papa ***
[6/3/2009 7:35:21 PM] *** Tobin Titus has changed the conversation topic to "Technical interviews" ***
[6/3/2009 7:41:42 PM] Norm: sounds good
[6/3/2009 7:41:56 PM] Lloyd Humphreys: Now I can't hear Sara :P
[6/3/2009 7:42:30 PM] Dane O'Connor: lost ya
[6/3/2009 7:42:36 PM] Lloyd Humphreys: ditto
[6/3/2009 7:42:36 PM] Nathan Kelley: same
[6/3/2009 7:42:39 PM] Dane O'Connor: back
[6/3/2009 7:42:41 PM] Sara Chipps: I can hear?
[6/3/2009 7:48:34 PM] James Pendarvis: Lost Sara
[6/3/2009 7:48:35 PM] Lloyd Humphreys: gone
[6/3/2009 7:48:36 PM] Dane O'Connor: losing ya
[6/3/2009 7:48:41 PM] Norm: lol
[6/3/2009 7:48:46 PM] Lloyd Humphreys: back
[6/3/2009 7:55:48 PM] Dane O'Connor: as an aside. r u a consultant Nick?
[6/3/2009 7:56:00 PM] James Pendarvis: Who here is an employee and who is a consultant?
[6/3/2009 7:56:10 PM] Tobin Titus: I'm an employee now :)
[6/3/2009 7:56:13 PM] Sara Chipps: consulting now
[6/3/2009 7:56:18 PM] brian papa: I'm an employee but I dabbled in consulting
[6/3/2009 7:56:30 PM] James Thigpen: I'm at some nebulous halfway point between the two. Employed but seeking consulting.
[6/3/2009 7:56:46 PM] Dane O'Connor: employee with consulting about 10-12 hrs a week
[6/3/2009 7:57:01 PM] Norm: More entrepreneur than employee as of now.
[6/3/2009 7:58:05 PM] Norm: So many life lessons in that one!
[6/3/2009 7:58:08 PM] Dane O'Connor: nathan breakin up
[6/3/2009 7:58:11 PM] Nathan Kelley: cue the beavis and butthed
[6/3/2009 7:58:15 PM] Tobin Titus: :)
[6/3/2009 7:59:03 PM] *** Tobin Titus has changed the conversation topic to "Commenting code smell" ***
[6/3/2009 7:59:25 PM] Nathan Kelley: /* no comment */
[6/3/2009 7:59:30 PM] Tobin Titus: lol
[6/3/2009 7:59:37 PM] Lloyd Humphreys: :D
[6/3/2009 8:03:22 PM] Norm: Personally would agree with Sarah if there are excessive or useless comments
[6/3/2009 8:04:16 PM] Tobin Titus: throw new NoEffinWayException()
[6/3/2009 8:04:30 PM] Dane O'Connor: breakin up
[6/3/2009 8:04:34 PM] Lloyd Humphreys: ditto
[6/3/2009 8:04:35 PM] Nathan Kelley: lag
[6/3/2009 8:04:36 PM] brian papa: static
[6/3/2009 8:04:41 PM] Dane O'Connor: NJ connection sux!
[6/3/2009 8:04:44 PM] Lloyd Humphreys: better
[6/3/2009 8:04:45 PM] Tobin Titus: breakin up is hard to do
[6/3/2009 8:04:51 PM] Tobin Titus: but sara keeps doing it
[6/3/2009 8:05:17 PM] Tobin Titus: lol
[6/3/2009 8:05:39 PM] Norm: lol
[6/3/2009 8:06:56 PM] Tobin Titus: as an aside, some code that I commented in 5 years ago just broke after running at a bank without a single error for 5 years... however, the fact that it broke exactly where my comment was... is almost proof for sara
[6/3/2009 8:07:07 PM] Sara Chipps: yesssss!
[6/3/2009 8:07:30 PM] Tobin Titus: I just tweeted about that earlier this week
[6/3/2009 8:08:16 PM] Dane O'Connor: quirks = +1 on comments
[6/3/2009 8:09:00 PM] Nick Berardi: Type targetType = typeof(NameValueCollection);
// get the property for setting readability
PropertyInfo isReadOnlyProperty = targetType.GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
// set headers as read and write
isReadOnlyProperty.SetValue(context.Request.Headers, false, null);
ArrayList list = new ArrayList();
list.Add(value);
// get the method to fill in the headers
MethodInfo filleInHeadersCollectionMethod = targetType.GetMethod("BaseSet", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(string), typeof(object) }, null);
filleInHeadersCollectionMethod.Invoke(context.Request.Headers, new object[] { name, list });
// set headers as read only
isReadOnlyProperty.SetValue(context.Request.Headers, true, null);
[6/3/2009 8:09:17 PM] Sara Chipps: this is the last comment I wrote (in VB.NET)
[6/3/2009 8:09:18 PM] Sara Chipps: 'This is really ugly code, I will hopefully fix later
[6/3/2009 8:09:32 PM] Tobin Titus: lol
[6/3/2009 8:11:23 PM] Dane O'Connor: haha
[6/3/2009 8:11:24 PM] Dane O'Connor: yeah
[6/3/2009 8:11:42 PM] Norm: lol
[6/3/2009 8:12:40 PM] James Pendarvis: pastie.org right?
[6/3/2009 8:14:20 PM] Dane O'Connor: // Magic. Do not touch.
[6/3/2009 8:20:24 PM] Tobin Titus: back
[6/3/2009 8:20:47 PM] James Thigpen: Some bad smells are really tasty cheese.
[6/3/2009 8:21:12 PM] Tobin Titus: #region
/// <summary> code smell here </summary>
#endregion
[6/3/2009 8:21:18 PM] Dane O'Connor: haha
[6/3/2009 8:22:04 PM] Tobin Titus: I have to be honest. I used to be a HUGe abuser of regions
[6/3/2009 8:23:31 PM] Dane O'Connor: // --- Methods | My Group
[6/3/2009 8:23:39 PM] *** Tobin Titus has changed the conversation topic to "stinky code with regions, and comments as code smells" ***
[6/3/2009 8:23:45 PM] Dane O'Connor: // --- Impl | Idispoable
[6/3/2009 8:24:10 PM] Nick Berardi: even with the mis-spelling and everything :D
[6/3/2009 8:24:14 PM] Dane O'Connor: :)
[6/3/2009 8:24:16 PM] Dane O'Connor: too fast
[6/3/2009 8:24:36 PM] Tobin Titus: like HTTP_REFERER <-- spehlt rowng
[6/3/2009 8:24:53 PM] Nick Berardi: I usually do
[6/3/2009 8:25:05 PM] Nick Berardi: #region exec sp_MyProc
[6/3/2009 8:25:14 PM] Nick Berardi: all the command related connection stuff
[6/3/2009 8:25:17 PM] Nick Berardi: #endregion
[6/3/2009 8:25:24 PM] Sara Chipps: #region methods
[6/3/2009 8:25:30 PM] Tobin Titus: #region Pandora's Box - do not expand
#endregion
[6/3/2009 8:25:31 PM] Sara Chipps: #region code
[6/3/2009 8:25:38 PM] Nick Berardi: LOL nice tobin
[6/3/2009 8:27:07 PM] *** Tobin Titus has changed the conversation topic to "Magical Elixors Framework" ***
[6/3/2009 8:27:40 PM] Norm: Awesome!
[6/3/2009 8:28:13 PM] Tobin Titus: I'm waiting for some to hold the following at a code camp: "MEF Lab"
[6/3/2009 8:28:42 PM] Tobin Titus: in the same mall?
[6/3/2009 8:29:17 PM] James Thigpen: it's an hour and 20 minutes
[6/3/2009 8:29:25 PM] Lloyd Humphreys: oh gWave seems pretty cool :D
[6/3/2009 8:29:41 PM] Lloyd Humphreys: I've been off school with pretty bad sunburn, so I've watched it ;)
[6/3/2009 8:29:49 PM] Tobin Titus: http://www.youtube.com/watch?v=v_UyVmITiYQ ?
[6/3/2009 8:29:53 PM] Lloyd Humphreys: it's pretty cool, yeah
[6/3/2009 8:30:27 PM] Lloyd Humphreys: there're some really cool concepts
[6/3/2009 8:30:44 PM] Lloyd Humphreys: like, you can take a "Wave" to your blog and embed it there etc
[6/3/2009 8:31:10 PM] James Thigpen: it'd look AWESOME
[6/3/2009 8:31:21 PM] Lloyd Humphreys: not a clue - nothing in the video about it
[6/3/2009 8:31:36 PM] Lloyd Humphreys: I imagine it'll be pretty solidly integrated with Android
[6/3/2009 8:31:50 PM] Tobin Titus: http://wave.google.com/
[6/3/2009 8:32:11 PM] Lloyd Humphreys: yeah
[6/3/2009 8:32:11 PM] Tobin Titus: http://wave.google.com/help/wave/about.html <-- screenshots
[6/3/2009 8:32:33 PM] Lloyd Humphreys: lost you
[6/3/2009 8:32:37 PM] Tobin Titus: lag
[6/3/2009 8:32:37 PM] Nathan Kelley: lag all
[6/3/2009 8:32:43 PM] Dane O'Connor: NJ ftl
[6/3/2009 8:32:44 PM] Dane O'Connor: !
[6/3/2009 8:32:46 PM] Tobin Titus: maybe the dingo ate your baby
[6/3/2009 8:34:28 PM] James Thigpen: Everytime I hear bing I think Chandler
[6/3/2009 8:34:31 PM] Tobin Titus: Cannibis lovers can search bong.bing.com
[6/3/2009 8:34:53 PM] Lloyd Humphreys: yup
[6/3/2009 8:36:27 PM] Lloyd Humphreys: for me, in ff3, that preview thing only works for one of the results and then doesn't work for any of the others?
[6/3/2009 8:36:33 PM] Sara Chipps: me too
[6/3/2009 8:36:34 PM] Lloyd Humphreys: lag
[6/3/2009 8:36:38 PM] Nick Berardi: is the travel feature from Kayak.com
[6/3/2009 8:36:55 PM] Tobin Titus: I'm in FF3 and it works fine
[6/3/2009 8:36:57 PM] Tobin Titus: yeah
[6/3/2009 8:37:00 PM] Tobin Titus: I think so
[6/3/2009 8:37:04 PM] Nathan Kelley: it's pretty accurate too, it says the red wings are 2 wins away from another cup
[6/3/2009 8:37:21 PM] Nathan Kelley: that didn't sound right
[6/3/2009 8:37:36 PM] Nathan Kelley: it said the wings won the 2009 stanly cup finals 4-1
[6/3/2009 8:38:13 PM] Lloyd Humphreys: yeah
[6/3/2009 8:38:29 PM] Tobin Titus: lol Nathan... shut your mouth son!
[6/3/2009 8:38:46 PM] Tobin Titus: There is no accuracy in that .. Pens will win again tomorrow!
[6/3/2009 8:38:55 PM] Lloyd Humphreys: I know Bing is great for newbs - if you look for NHL and it gives you related stuff like NHL tickets or something.. thing is, if I want the stuff in the related searches, I'll *search* for the related searches :P
[6/3/2009 8:39:09 PM] Sara Chipps: hahah, nice
[6/3/2009 8:39:43 PM] Tobin Titus: what about if we gave you a para quarters in stead?
[6/3/2009 8:39:50 PM] Nick Berardi: Tobin you have a really loud keyboard
[6/3/2009 8:40:00 PM] James Pendarvis: What are you using either service for?
[6/3/2009 8:41:11 PM] Sara Chipps: searching?
[6/3/2009 8:42:19 PM] Tobin Titus: http://twitpic.com/6jm02
[6/3/2009 8:43:08 PM] *** Tobin Titus has changed the conversation topic to "Twitter, Bing, Google, Searching, Symantic Web" ***
[6/3/2009 8:43:16 PM] *** Tobin Titus has changed the conversation topic to "Twitter, Bing, Google, Searching, Semantic Web" ***
[6/3/2009 8:43:18 PM] Lloyd Humphreys: give you free money
[6/3/2009 8:43:23 PM] Nick Berardi: PAY ME PER SEARCH
[6/3/2009 8:43:29 PM] Dane O'Connor: lol
[6/3/2009 8:43:31 PM] Sara Chipps: hahaha I love free money
[6/3/2009 8:43:31 PM] Dane O'Connor: omg
[6/3/2009 8:43:33 PM] Tobin Titus: Nick , they sorta tried that
[6/3/2009 8:43:35 PM] Norm: Has anyone used http://www.wolframalpha.com/ ?
[6/3/2009 8:43:37 PM] Lloyd Humphreys: yeah
[6/3/2009 8:44:09 PM] *** Tobin Titus has changed the conversation topic to "Paul Wolfowitz's new search engine" ***
[6/3/2009 8:44:59 PM] Norm: lol - right, it seems useful at some point but a bit unrefined
[6/3/2009 8:45:37 PM] Norm: true
[6/3/2009 8:46:23 PM] James Thigpen: I'm gonna make bing my default search engine in chrome for a few days, see what happens.
[6/3/2009 8:46:36 PM] Nathan Kelley: if people at work ask me search related questions i use http://lmgtfy.com/
[6/3/2009 8:47:36 PM] *** Tobin Titus has changed the conversation topic to "Talking to computer classes" ***
[6/3/2009 8:48:28 PM] Lloyd Humphreys: we have such boring computer classes here :(
[6/3/2009 8:49:25 PM] Lloyd Humphreys: thats wicked
[6/3/2009 8:50:13 PM] Norm: those are the best!!
[6/3/2009 8:50:15 PM] Lloyd Humphreys: :P
[6/3/2009 8:51:41 PM] *** Tobin Titus has changed the conversation topic to "Lego Mindstorm" ***
[6/3/2009 8:51:42 PM] Lloyd Humphreys: I was always more of a Meccano man
[6/3/2009 8:51:58 PM] brian papa: http://www.makerbot.com/
[6/3/2009 8:52:09 PM] Lloyd Humphreys: anybody played with Arduino?
[6/3/2009 8:52:55 PM] Nathan Kelley: http://www.nathanblevins.com/
[6/3/2009 8:53:01 PM] Tobin Titus: http://msdn.microsoft.com/en-us/robotics/default.aspx
[6/3/2009 8:53:41 PM] Lloyd Humphreys: just been playing with WAlpha - try Searching your DOB
[6/3/2009 8:55:22 PM] Lloyd Humphreys: sweet, I'm 815 weeks old :D
[6/3/2009 8:55:50 PM] James Pendarvis: Great..my B-day was the date of the Charles Manson Murders
[6/3/2009 8:55:53 PM] Lloyd Humphreys: I <3 Greys Anatomy :P
[6/3/2009 8:55:58 PM] Nick Berardi: so you want to cut off the recording, since this has degraded in to geeks searching wolfram alpha
[6/3/2009 8:56:08 PM] Lloyd Humphreys: haha
[6/3/2009 8:56:36 PM] Tobin Titus: http://wolframsbeta.com/
[6/3/2009 8:57:16 PM] Norm: or replay the awesome echo laughs
[6/3/2009 8:57:17 PM] Lloyd Humphreys: thats great
[6/3/2009 8:57:34 PM] Lloyd Humphreys: wtf is twiffleball?
[6/3/2009 8:57:59 PM] Lloyd Humphreys: wtf is wiffleball? :P
[6/3/2009 8:58:26 PM] Lloyd Humphreys: yeah
[6/3/2009 8:58:36 PM] Lloyd Humphreys: (y)
[6/3/2009 8:58:45 PM] Lloyd Humphreys: gotcha
[6/3/2009 8:59:09 PM] Lloyd Humphreys: if anybody feels like buying me a plane ticket I'll come on over :P
[6/3/2009 8:59:28 PM] Tobin Titus: "I did it like this. I did it like that. I did it with a wiffleball bat." ... see that just makes no sense.
[6/3/2009 8:59:58 PM] Tobin Titus: http://www.fmcarenas.com/img/wiffleball.jpg
[6/3/2009 9:01:11 PM] Nick Berardi: its all about hte networking
[6/3/2009 9:01:47 PM] Lloyd Humphreys: www.managingthegray.com is great for social media stuff - you'd be surprised
[6/3/2009 9:02:07 PM] Dane O'Connor: tobin!
[6/3/2009 9:02:14 PM] Nick Berardi: what is going on over there
[6/3/2009 9:02:54 PM] Nick Berardi: it's not April 1st anymore Sara
[6/3/2009 9:02:59 PM] Nick Berardi: you don't have to beleive everything
[6/3/2009 9:03:44 PM] brian papa: i'm gonna head out guys, had fun
[6/3/2009 9:03:50 PM] Lloyd Humphreys: bye
[6/3/2009 9:03:51 PM] Tobin Titus: see ya
[6/3/2009 9:03:51 PM] Dane O'Connor: cya bri
[6/3/2009 9:05:05 PM] Nathan Kelley: http://netcave.org/
[6/3/2009 9:05:16 PM] James Thigpen: thanks everyone
[6/3/2009 9:05:19 PM] Lloyd Humphreys: catch you soon :)
[6/3/2009 9:05:30 PM] Nathan Kelley: http://netcave.org/ct.ashx?id=8335804e-124b-4825-9292-2851bcba38bb&url=http%3a%2f%2fvimeo.com%2f3898804
[6/3/2009 9:05:57 PM] Norm: Yup same. Been great!
[6/3/2009 9:05:59 PM] Lloyd Humphreys: bye!
[6/3/2009 9:06:01 PM] *** Call ended ***
[6/3/2009 9:06:25 PM] *** Tobin Titus has left ***
Monday, June 1, 2009
The Rotting Stink of Corporate IT
My friend Lisa has a prejudice against those lip glosses that come in a little jar. The kind you dip your finger in and rub on your lips? She calls them little petri dishes, with all the bacteria and germs from your fingers just living in there waiting for their next home.
I see many similarities between lip gloss germ factories and corporate IT. There are good bacteria, and there are bad bacteria, but what they have in common is that they fester. The good developers fester in frustration, the frustration of change request forms. The frustration of knowing the right thing to do, and not being able to do it until four months later when the "budget is there." The bad programmers are festering in sloth, in the fact that their work goes largely unnoticed and as long as their tie matches their shirt we can ignore the fact that their classes go on for days, and their code is illegible, and their methods are bloated. In these environments you are taught that to care is to waste time, and the only thing that is important is that it GETS DONE, not if it is done right. A culture of apathy and wanton disregard for standards is all that is being enforced.
The biggest issue here is not the bad programmers, it's not the suffocated good programmers, as they say "A fish rots from the head." Management is who decides what the priorities are. If the priority is to "get it done so it works for now and ship it out" you will get exactly what you asked for. It starts at the top, when the CTO puts pressure on the IT Directors who put pressure on the Department Managers who in turn flip on their coders and turn the screws that bind them. Some symptoms of this are projects that are constantly coming back for work, deadlines that are constantly pushed, and the blame game from QA to the developers to the testers.
Can a large corporation have a healthy team? Yes. I didn't used to think so, but I have kept my eyes and ears open. I haven't experienced it, but I have met people that have shared their good experiences. The friends I have that are in corporate IT that are also happy have always had one thing in common: small teams. When you break up a big group into small teams, and hold the leaders of those teams personally responsible for the health of the team it succeeds. When you give them the tools they need for success, when you make it about who is contributing the best, when managers take the time to examine who is touching the code and IF what they are doing is the best solution, that's when you can succeed. When you allow for enough time and budget to make sure that things only need to be done once, and changes can be easily made, that's when you can succeed. The Five Dysfunctions book is a great place to start if you are looking to do so. I can imagine it's hard work, but when you look at companies like Microsoft and Google the reward is obviously worth it.