Teamwork is not easy. It never is. Whether it's basketball, football, sales, construction, or software, it's difficult to instill a sense of team and ensure that everyone operates as a member of a team.
There are individual egos to deal with, different levels of skill to integrate, different talents that have to be recognized in the context of the team, and there is the ever present problem of communication.
Lately, I've been disappointed in the level of teamwork I've been witnessing on my project (on a scale of 1-10, it'd be around a 2). Sure we have our weekly call in and discussion and random emails throughout the week. But is that enough to bring a large system, with multiple components together in a short timeframe?
I recently suggested to my teammates that we've been lacking the team spirit and that perhaps it's a good idea for those that will be interfacing with my component to at least install and test against the actual component that I wrote. The following is my response to the response that I received, which claimed that such efforts at this time are "counterproductive" (names have been changed):
Hmm...here I thought we were building interacting pieces
I don't know, maybe it's just me, but I feel like one person can only take code so far; working in isolation with little feedback leads to code with obvious bad practices and holes that are hard to spot once I've gotten a concept in my head. Not to mention that there will be tons of duplicate work efforts (as I discovered from Brian the other night, the database work I've been doing is also relevant for Don and Sam). I'm 100% certain that there will be bugs and inefficiencies that will only be turned up once you and Sam start to interface with it. Not only in my code, but also in your codebases as well. At least from my perspective, I'd like to find these bugs and hammer them out. To hope for the best when we plug it all together at the last moment is a bad way of working, IMO. I would even propose that the Friday session every week be turned into a full integration and end-to-end test session to get everyone to integrate and test pieces with a seperate Monday session to cover what the goals are for the week and catch-up.
And again, my piece is here to service WildCat and RazorBack...how can I be sure that it does this in an easy to use and well designed fashion if I'm the only one using it? It is certainly easy to use and well designed *to me*, but are there obvious mistakes in the design? Are the major flaws in the code that need to be fixed? Who knows? Everything looks rosy *to me*. End-to-end testing has not been done or setup and I feel that there are sure to be issues that will only be uncovered with end-to-end testing. I know there are flaws and I want to fix them, but many of the flaws are not so apparent to my eyes but would easily be exposed by end-to-end testing and WildCat and RazorBack actually integrating with the pieces.
I understand that we each have responsibilities. But isn't part of my responsibility to ensure that my piece properly services WildCat and RazorBack? Alternatively, isn't part of WildCat's responsibility to ensure that it can tell EastCastle to do what it wants?
I feel like the way we're working is much like a football team which never practices as a unit, each player only works on individual drills. Come game day, now all of a sudden the team is expected to play as a unit. How can the coach predict whether the team will work well if he never sees them practice as a unit? This is unrealistic even for the most skilled professional football players (that's what training camp and full team non-contact drills are for)...how can it be realistic for us? I dunno...building large systems is no less a team game than basketball or football or crew : the team that trains together wins together. Expecting pieces to magically work together after weeks or months of development in silos is dangerous and unrealistic to me.
Teamwork is difficult for any group of guys and gals. Doubly so when the team is dispersed. But is it "counterproductive" to try to build upon a team effort and really have everyone write software as a team? Is it really an idealistic view of how software should be written that I'll discard as I age and become more cynical? Bear in mind that I'm not debating "Aristocracy, Democracy, and System Design" as Fred Brooks does in Chapter 4 of The Mythical Man Month, as I strongly believe in "conceptual integrity" as a basis for simplifying and clarifying a framework or codebase. But rather, what I'm questioning is the team working completely independently with little communication and actual testing of interfaces.
I'll admit that I myself haven't been the best of team players, but, none-the-less, all I was seeking was a minimum amount of teamwork: integrating pieces once in a while in "practice" as opposed to integrating in the few minutes leading up to game time and hoping for the best, you know?
About a week ago, I caught a documentary on the House of Saud on PBS (in HD, too!).
It was a riveting program that helped shed a lot of light onto historical relationships between Saudi Arabia and the US. It also brought to perspective a lot of the current thinking in Suadi Arabia and view of the geo-political landscape from one of the most prominent Middle Eastern nations.
The full transcripts of the interviews are available from the site and I suggest anyone with an interest in the subject of the current war and an interest in the region in general take a glance at the information available at the site.
In the short history of what we know today as the nation of Saudi Arabia, the country has been lead by visionary leaders such as Abd al-Aziz and King Faisal. It has undergone transformations from a small desert nation of fiefdoms into one of the wealthiest and most developed nations in the Middle East.
Most importantly, it is one of the few (the only?) Arab nations that has traditionally been an ally of the United States, throughout the last 60 years.
Prince Amr ibn Mohammad al-Faisal, great grandson of al-Aziz, reveals that at one point in time, the US was actually viewed upon quite favorably:
And so, [in 1945, aboard] the [U.S.S.] Quincy, he met with President [Franklin] Roosevelt.
Early on, [Abd al-Aziz] understood that the British Empire was on its last legs
and that the new power coming out was the United States. And so he
quickly tried to establish contacts with the U.S. ... [At that time]
the U.S. was looked on favorably by most of the Muslim world [because]
it was not a colonial power. On the contrary, it was anticolonial. It
was ... the policy of the U.S. that decolonization was [one] of its
principles, that people should have the right to self-determination.
... It was only Saudi Arabia in the region, and maybe Yemen, [that
were] uncolonized. Everybody else was either under the British, the
French, the Italians or whoever else there was.
So it was a logical and natural alliance between Saudi Arabia and
the United States. The United States was a young, dynamic power, a
growing power, that was not colonial, that was against colonialism, a
people that were religious just like we are religious. They have a very
strong faith in their Christian heritage, and we have a very strong
faith in our Muslim heritage.
While we are not yet enemies (and probably will never be), the consensus in the Middle East, even among the educated Saudis is that the American response in Iraq during this second Gulf War (their third) has been very negative.
When asked about the anger towards America, Bassim Alim, a very progressive Saudi attorney states:
Let me say, it's not that they're not unhappy. They're not; it
doesn't concern them. America is king everywhere. [America] is giving
us a hard time everywhere. So if this happened to America, we will not
stand up and say [that] we are the defenders of America and this should
not happen. We know it should not happen, but they're not going to cry
over it. It's this kind of feeling that took place amongst a certain
segment of society at the beginning.
[At] this stage, many segments of society are actually quite
entrenched in being opposed to America as an idea. They are dismayed;
they are disillusioned by America. We thought that you really meant
what you said in your constitution, all these issues of freedom and
rights and carrying the banner of human rights, and the Wilsonian
doctrine -- it all went out the window because of 3,000 people?
It's a significant number, but there are hundreds of thousands who
are dying all over [because of] this, hundreds of thousands. Look how
many died in Palestine, in Iraq, for all these years when Saddam
Hussein was ruling Iraq -- [who], by the way, was supported by America
-- and you didn't shed a tear. You only shed tears when it starts
affecting your own policies, your own interests. In the Arab world,
that's not right. You don't look at your interests alone. If you claim
something, you have to be fair. It has to be an equal ruling for you
and for me.
In the US, I think many of us are incapable of, to quote the Dalai Lama, "equalizing and switching of self and others"; we readily label others as evil or enemies without first evaluating ourselves and putting us in the shoes of those who would hate us. We do not take the time to seriously evaluate the root cause of the hatred and we do not make the effort to address these issues, nay, we do not even acknowledge these issues. We can't even begin to imagine why we aren't viewed and celebrated as liberators. We tend to be simple minded and view ourselves with righteousness without considering the opposing view and the perceptions of others.
I will give you an example: [What if] today there were 500,000 Saudi
troops armed to the teeth in the middle of England? Wouldn't the
English be [un]happy about that?
Anything controversial, anything that is massive and shocking, like the
[arrival] of 500,000 armed soldiers with their equipment in the middle
of your country, this is not something that is easy. Nobody is going to
be thrilled to know that there is a huge mass of foreign army on his
soil, no matter what the pretext or what the justification is. It is
something that will make anybody uncomfortable.
al-Faisal states the obvious; if the situation were the other way around and half a million armed troops were in the US "liberating" us from GWB, I'm sure even these fighters would be viewed with disdain by the liberal left. "They hate our freedom" is perhaps the embodiment of this ignorant way of thinking; it is masking our faults by expressing a seemingly patriotic statement which gets thrown to the wind with each law that further restricts our rights and freedoms.
Watching this documentary was very insightful. It not only showed some very informative and interesting first-hand perspectives from Saudis, but also showed how our leaders have lost their mastery of diplomacy. Watching the events unfold is simply startling as it starts to expose the history of the conflict, the betrayal of the United States (on multiple occassions), and perhaps why we can never "win" this war that we've started since we have not addressed the root cause of the opposition. It is reflective of the lack of accountability by this administration that is pervasive throughout all of the policy.
That's Quincy, our new bearded dragon.
Interesting little critter...quite aware of us and of the surroundings; extremely inquisitive and quite cute But also quite a pain in the ass to take care of.
Perhaps one of the most dangerous fears of Man is the fear of change. It is a fear of the new and a desire to remain close to "the old ways". This occurs on a macro and micro level. On a macro level, it turns once progressive nations inwards and backwards. Such is the case with many of the Islamic states around the world where extremist groups denounce the ways of the West and force the government to enact stricter codes adhering to the old ways and to Islam.
It happens on a micro level, too. My wife refuses to try sushi (not that I like it much myself, but I've at least tried it) not because of any real reasons like allergies or whatever, but because of fear. It is a fear of the different, a fear of the new, and a fear of the unknown. You can look at it, smell it, and poke it...but you won't know whether it tastes good until you put it in your mouth.
Perhaps this is a natural and reasonable fear that has developed through years of evolution and natural selection. Certainly, that red berry looks edible, but no one has ever eaten one...so who should be the one to test whether it is edible?
As a developer, though, this fear bothers me a lot when I see it in others. While I do not claim to be free from it, I've always adopted a stance of at least giving every technology a chance before making judgements. I keep a directory called "Sandbox" on my disk drive where I dump all of my code that I use to play around with various technologies, tools, and frameworks. I believe the only way to learn whether such things are useful is by actually using them, practicing their principles, and understanding how they work.
In a sense, the landscape of the software development world is like a giant buffet; there is so much variety, so many flavors, so many dishes, and so many variations of dishes, that it can be comforting to just stick with what you know and be a little skeptical about dishes that look foreign and/or different from your staple diet. It's quite a shame to go to a buffet and only stick to two or three dishes isn't it?
Perhaps it's because I'm younger, but I don't think much about trying out this framework or that tool package. I only know that I can't discern whether it suits my "taste" until I try it at least. Too often, working with the older generation is like taking my sister in law out to eat with us; her diet basically consists of chicken fingers, burgers, and occasionally, steak. It's frustrating to no end because she refuses to give anything a chance that even appears to be mildly "icky" like fish or mushrooms.
From a development perspective, such fears ultimately lead developers to cling to hold habits and old ideas because they work. It burdens a developer in the same way that a fear of a "mechanized cart" would burden a man who refuses to trade his mule pulled cart for a car. More importantly, it means that the ability to improve efficiency becomes limited by the ability of the developer. This saddens me because these tools, frameworks, and practices are all developed with a singular goal: to make development easier. Developers who hold this fear of the new and this fear of change close to their hearts ultimately sacrifice productivity for comfort. While not all packages, tools, and practices lead to results (much like not all diets will lead to weight loss), it is very difficult to tell (unless the ideas are absolutely absurd) whether the idea is useful unless it is tested in use.
But I think one has to go even further than that. Evaluation cannot be done half-heartedly; one has to adopt the mindset of those using the tools and frameworks. One must adopt the philosophy of the tool or framework in question. Simply using the tool or framework without dropping one's typical practices and mindset for new ones (at least temporarily) will not do much good at all as it only leads to the inevitable "discovery" that "this tool doesn't do what I want it to do" or "it's no better than what I was using anyways". Is that really the case? Or is it really that it means that an old way of thinking requires some adjusting?
A good example is NHibernate, which allows users to still use ADO.Net like data retrieval patterns via direct SQL queries (since there are obviously cases where it may be necessary, especially when bootstrapping it on top of an old/poorly designed database). Some would try it and proceed to only use the direct SQL queries. Evaluating NHibernate, then, without dropping the ADO.Net mentality leads the evaluator to a "it's no better than what I've been using" conclusion.
So what's the moral of this post? Don't be afraid of new frameworks or new tools. I absolutely hate it when developers generalize and flat out state "well, from my exprience, frameworks are always more of a hassle than they're worth", "they never do exactly what I want it to do", or "it'll take too much time to learn the framework" without having written one line of code against the tool, framework, or library. First of all, it's a fact, 99% of all generalizations are false :-). Secondly, these types of statements cannot be made accurately until actual code has been written.
Hunt and Thomas write, in chapter 1 of "The Pragmatic Programmer":
Managing a knowledge portfolio is very similar to managing a financial portfolio:
- Serious investors invest regularly--as a habit.
- Diversification is the key to long-term success.
- Smart investors balance their portfolios between conservative and high-risk, high-reward investments.
- Investors try to buy low and sell high for maximum return.
- Portfolios should be reviewed and rebalanced periodically.
Just like financial investments, it pays to diversify, to try new strategies, and it always pays to put in a lot of heavy lifting into researching a particular investment. Tools, frameworks, and libraries already in one's portfolio should always be subject to re-evaluation and perhaps, when the time comes, it may mean that one's knowledge portfolio needs to be rebalanced.
Over at engadget, a headline caught my eye today: "Chinese workers reportedly toil in the 'iPod City'".
It's certainly nothing that we haven't heard before, overseas labor is so cheap these days, who can compete with American labor and just and humane labor laws? In the fight to save an extra nickel here and an extra penny there, we, of all nations, do nothing to seriously counter and discourage this type of "indentured servitude" and the poor working conditions in countries all over the world.
What irks me the most is that there was a time when manufacturing jobs in America were well paying jobs; they were jobs that you could raise a family on and they were well respected jobs.
So what's happened in the last few decades?
I don't proclaim to know anything about economics or manufacturing, but I really wonder how we've lost our ability to compete.
Perhaps what I don't get is how we've lost the spirit and wisdom of Henry Ford.
On January 5, 1914, Henry Ford announced a new minimum wage of five dollars per eight-hour day, in addition to a profit-sharing plan. It was the talk of towns across the country; Ford was hailed as the friend of the worker, as an outright socialist, or as a madman bent on bankrupting his company. Many businessmen -- including most of the remaining stockholders in the Ford Motor Company -- regarded his solution as reckless. But he shrugged off all the criticism: "Well, you know when you pay men well you can talk to them," he said. Recognizing the human element in mass production, Ford knew that retaining more employees would lower costs, and that a happier work force would inevitably lead to greater productivity. The numbers bore him out. Between 1914 and 1916, the company's profits doubled from $30 million to $60 million. "The payment of five dollars a day for an eight-hour day was one of the finest cost-cutting moves we ever made," he later said.
There were other ramifications, as well. A budding effort to unionize the Ford factory dissolved in the face of the Five-Dollar Day. Most cunning of all, Ford's new wage scale turned autoworkers into auto customers. The purchases they made returned at least some of those five dollars to Henry Ford, and helped raise production, which invariably helped to lower per-car costs.
So what has happened to this belief that helping American's do better as a nation, in turn, helps the bottom line? What has happened to this humanistic element of industry and work? Is it really just about the bottom line nowadays? Is it really just about padding executive salaries and stock price?
If American companies like New Balance, Japanese companies like Toyota, Korean companies like Hyundai, and German companies like Mercedes Benz can successfully employ Americans to manufacture products for the American market, why can't more American companies do the same? Why can't Apple, a pretentious, image conscious company, do it? I'd think it would make a great marketing campaign and improve sales (though probably lower overall profits) if it were made in the USA.
Perhaps we've simply lost our ability to innovate and perhaps we've lost our interest in industrial engineering and innovating in that field. Surely, through superior industrial engineering and a willingness to take a chance, we can make American manufacturing as competitive (on a broad scale, factoring in the increase an wages).
There was a time when cars were only for the rich and elite. There was time when those that manufactured the cars did not make enough money to own one. Likewise, the Chinese who manufacture our iPods cannot own their own iPod. But be aware, this will surely change as manufacturing jobs continue to flow offshore and the wealth of American's are transferred to other nations.
Pure Genious: http://www.realtechnews.com/posts/3155
Brilliantly simple and intuitive.
I'm a firm believer that the simplest, most obvious ideas are the ones that require the most ingenuity to come up with.
Web development in IE just got a whole lot better (well, at least for me).
Enter Microsoft's Internet Explorer Developer Toolbar (link).
This is one area where IE has been just left behind in the dust by FireFox. But this is definitely a nifty add-on!
Just a short outline of the features:
- Built in validation from a dropdown. Nifty and convenient.
- Built in onscreen ruler! This is awesome.
- Ability to quickly resize the window.
- DOM browser like FireFox.
And a ton of other stuff.
If you make webpages for a living, then all I can say is: Must. Download. Now!
Note that after installing it, you have to enable it by selecting it from the View->Toolbars menu item (it's instinctive to look in the Tools menu and get baffled by the lack of new menu items).
Update: there's also a non-Microsoft, FireFox analogue.