Finally Found

Sometimes it is difficult to find the location of opensource software. It is not always available where you would look for it. I have been looking for the source code location of Adept for a while now (well, I haven’t wanted it so badly that I was willing to install Ubuntu.) Currently the only source copies are in KDE svn. Get adept from anonomous KDE svn this way:

svn co svn://anonsvn.kde.org/trunk/playground/sysadmin/adept

Software Development
and Project Success

When I was growing up our family’s resources were less extensive than they are now, and as such, we sometimes had to do without some perks. One of these perks was a complete set of tools for home/car repair. Simple fixes like changing a battery would result in hours of work because of the inherit limitations of our tools; which ostensibly consisted of a hammer and a butter knife. Whenever I was brushing off the latest “injury” incurred while fixing something, my father would say to me, “Everything is simple if you have the right tool.” The better the tool is at doing a specific task, the easier it will be to complete that task. Ever watched “This Old House?” They had a tool to do everything! I didn’t even know they made adjustable-corner-rounded-cut-circular-door-saws with the optional digital level… cordless, if you are lucky. Heck, if I had a shop with 30 million dollars worth of specialized equipment, I bet even I could make something as fundamentally complex as a bar stool.

“Everything is simple if you have the right tool.”

This maxim (while not always true) is amazingly accurate in describing the modern development process. In fact, this is the reason I work on KDE (as opposed to the “other” Linux desktop environment.) Things are simply easier to do, are more productive, and more functional because the tool is designed better and focused specifically on desktop software development.

Today I ran into a series of articles by some application developers who I have come to respect. Their insight into the software development process will hopefully help give me some direction on future project management. Here they are will some selected quotes that stand out:

The strongest indication of a weak team is the realization that if you were to quit and start your own business, you wouldn’t try to poach any of your colleagues.

“Strong teams have almost impossibly high hiring standards. Strong teams will always leave a desk empty rather than settling for less than the best.”

“Examples of development hygiene include source code versioning, maintenance of an accurate bug or issue database, significant use of automated testing, continuous integration, and specifications that are kept current (whether incredibly detailed or high-level overviews).”

“A chicken is an individual who has significant authority over your project, but does not make a personal commitment to the success of the project.”

“And every time I’ve delivered software on schedule milestone after milestone, my influence and standing with stakeholders has grown. And every time I’ve missed a date, I’ve suffered, regardless of whether the late software was demonstrably better than what was originally planned for the missed date.”

“Documents such as specifications yield the same benefits of source control.”

“Discard all processes that are mechanically completed with little actual benefit. Tweak those that require more effort than necessary, maximizing the results while minimizing the effort.”

Google’s Rules

I thought this article by Google’s Eric Schmidt and Hal Varian was really solid so I am linking to it and posting some of the more important parts of the article. Here is Google: Ten Golden Rules

By Eric Schmidt and Hal Varian
Newsweek
Updated: 11:33 a.m. ET Dec. 2, 2005

Issues 2006 – At google, we think business guru Peter Drucker well understood how to manage the new breed of “knowledge workers.” After all, Drucker invented the term in 1959. He says knowledge workers believe they are paid to be effective, not to work 9 to 5, and that smart businesses will “strip away everything that gets in their knowledge workers’ way.” Those that succeed will attract the best performers, securing “the single biggest factor for competitive advantage in the next 25 years.”

At Google, we seek that advantage. The ongoing debate about whether big corporations are mismanaging knowledge workers is one we take very seriously, because those who don’t get it right will be gone. We’ve drawn on good ideas we’ve seen elsewhere and come up with a few of our own. What follows are seven key principles we use to make knowledge workers most effective. As in most technology companies, many of our employees are engineers, so we will focus on that particular group, but many of the policies apply to all sorts of knowledge workers.

* Hire by committee. Virtually every person who interviews at Google talks to at least half-a-dozen interviewers, drawn from both management and potential colleagues. Everyone’s opinion counts, making the hiring process more fair and pushing standards higher. Yes, it takes longer, but we think it’s worth it. If you hire great people and involve them intensively in the hiring process, you’ll get more great people. We started building this positive feedback loop when the company was founded, and it has had a huge payoff.
* Cater to their every need. As Drucker says, the goal is to “strip away everything that gets in their way.” We provide a standard package of fringe benefits, but on top of that are first-class dining facilities, gyms, laundry rooms, massage rooms, haircuts, carwashes, dry cleaning, commuting buses”just about anything a hardworking engineer might want. Let’s face it: programmers want to program, they don’t want to do their laundry. So we make it easy for them to do both.
* Pack them in. Almost every project at Google is a team project, and teams have to communicate. The best way to make communication easy is to put team members within a few feet of each other. The result is that virtually everyone at Google shares an office. This way, when a programmer needs to confer with a colleague, there is immediate access: no telephone tag, no e-mail delay, no waiting for a reply. Of course, there are many conference rooms that people can use for detailed discussion so that they don’t disturb their office mates. Even the CEO shared an office at Google for several months after he arrived. Sitting next to a knowledgeable employee was an incredibly effective educational experience.
* Make coordination easy. Because all members of a team are within a few feet of one another, it is relatively easy to coordinate projects. In addition to physical proximity, each Googler e-mails a snippet once a week to his work group describing what he has done in the last week. This gives everyone an easy way to track what everyone else is up to, making it much easier to monitor progress and synchronize work flow.
* Eat your own dog food. Google workers use the company’s tools intensively. The most obvious tool is the Web, with an internal Web page for virtually every project and every task. They are all indexed and available to project participants on an as-needed basis. We also make extensive use of other information-management tools, some of which are eventually rolled out as products. For example, one of the reasons for Gmail’s success is that it was beta tested within the company for many months. The use of e-mail is critical within the organization, so Gmail had to be tuned to satisfy the needs of some of our most demanding customers”our knowledge workers.
* Encourage creativity. Google engineers can spend up to 20 percent of their time on a project of their choice. There is, of course, an approval process and some oversight, but basically we want to allow creative people to be creative. One of our not-so-secret weapons is our ideas mailing list: a companywide suggestion box where people can post ideas ranging from parking procedures to the next killer app. The software allows for everyone to comment on and rate ideas, permitting the best ideas to percolate to the top.
* Strive to reach consensus. Modern corporate mythology has the unique decision maker as hero. We adhere to the view that the “many are smarter than the few,” and solicit a broad base of views before reaching any decision. At Google, the role of the manager is that of an aggregator of viewpoints, not the dictator of decisions. Building a consensus sometimes takes longer, but always produces a more committed team and better decisions
* Don’t be evil. Much has been written about Google’s slogan, but we really try to live by it, particularly in the ranks of management. As in every organization, people are passionate about their views. But nobody throws chairs at Google, unlike management practices used at some other well-known technology companies. We foster to create an atmosphere of tolerance and respect, not a company full of yes men.
* Data drive decisions. At Google, almost every decision is based on quantitative analysis. We’ve built systems to manage information, not only on the Internet at large, but also internally. We have dozens of analysts who plow through the data, analyze performance metrics and plot trends to keep us as up to date as possible. We have a raft of online “dashboards” for every business we work in that provide up-to-the-minute snapshots of where we are.
* Communicate effectively. Every Friday we have an all-hands assembly with announcements, introductions and questions and answers. (Oh, yes, and some food and drink.) This allows management to stay in touch with what our knowledge workers are thinking and vice versa. Google has remarkably broad dissemination of information within the organization and remarkably few serious leaks. Contrary to what some might think, we believe it is the first fact that causes the second: a trusted work force is a loyal work force.

Of course, we’re not the only company that follows these practices. Many of them are common around Silicon Valley. And we recognize that our management techniques have to evolve as the company grows. There are several problems that we (and other companies like us) face.

One is “techno arrogance.” Engineers are competitive by nature and they have low tolerance for those who aren’t as driven or as knowledgeable as they are. But almost all engineering projects are team projects; having a smart but inflexible person on a team can be deadly. If we see a recommendation that says “smartest person I’ve ever known” combined with “I wouldn’t ever want to work with them again,” we decline to make them an offer. One reason for extensive peer interviews is to make sure that teams are enthused about the new team member. Many of our best people are terrific role models in terms of team building, and we want to keep it that way.

A related problem is the not-invented-here syndrome. A good engineer is always convinced that he can build a better system than the existing ones, leading to the refrain “Don’t buy it, build it.” Well, they may be right, but we have to focus on those projects with the biggest payoff. Sometimes this means going outside the company for products and services.

Another issue that we will face in the coming years is the maturation of the company, the industry and our work force. We, along with other firms in this industry, are in a rapid growth stage now, but that won’t go on forever. Some of our new workers are fresh out of college; others have families and extensive job experience. Their interests and needs are different. We need to provide benefits and a work environment that will be attractive to all ages.

A final issue is making sure that as Google grows, communication procedures keep pace with our increasing scale. The Friday meetings are great for the Mountain View team, but Google is now a global organization.

We have focused on managing creativity and innovation, but that’s not the only thing that matters at Google. We also have to manage day-to-day operations, and it’s not an easy task. We are building technology infrastructure that is dramatically larger, more complex and more demanding than anything that has been built in history. Those who plan, implement and maintain these systems, which are growing to meet a constantly rising set of demands, have to have strong incentives, too. At Google, operations are not just an afterthought: they are critical to the company’s success, and we want to have just as much effort and creativity in this domain as in new product development.

Schmidt is CEO of Google. Varian is a Berkeley professor and consultant with Google.

No Title Today

I have not been in the mood to blog lately. I am not entirely sure why, but it may have something to do with just being burnt out. In spite of how I feel I must get these links up. That said, I have been scanning news feeds for articles about Linux authentication mechanisms. Linux (via PAM) has the uncanny ability to authenticate to everything from a Windows AD network to SSL shared keys. I am fairly sure it would even be possible to get PAM to use the current state of my toaster oven to validate a user. Of greatest interest to me is, getting Linux to use use LDAP for network authentication. As such we have todays links.

Hopefully I will be back to my full blogging glory after this weekend. Lots has been happening in the world, in my life, and in my home; but until I get out of this slump my body just keeps saying “NO blogging today!”

I Do What?

So you have recently been described (or maybe reclassified) as a Software Architect. So exactly what does that mean? This question is asked often enough by re-christened software engineers that you can actually find wikipedia entries on it. Well, thankfully, informait.com Do?” href=”http://www.informit.com/articles/article.asp?p=417090&rl=1″>has the answer. Besides of fun of design (obviously boring part of the job) you also get to write a whole new class of reports… and meetings!

Super Suse

Yesterday, Open Suse released Suse Linux 10. The upgrade has been painless for me and adds a significant number of improvements over 9.3. With community support for Open Suse, things are even getting better. The default Suse 10 install is Free Software only; but this overview will get you everything you need to complete your Suse install (i.e. commercial applications line Adobe Acrobat, Real Player, Java, Windows Media Codexes, and Flash.) So far its been a really nice ride.

AJAX Development

With the success of maps.google.com intrest has begun to grow in Ajax programming. Functionally AJAX programming JavaScript, DHTML, and XML to “communicate” between a web browser and a server without the need to refresh the screen (actually AJAX is about a great deal more than that, but this is the part that everyone seems interested in.)

To get a good intoduction into AJAX I have found a couple simple tutorials. Using AJAX is a basic tutorial (with examples) for getting web developers familiar with using and developing AJAX. Guide to Using XMLHttpRequest is a baby steps approach to setting up the communications interface between JavaScript and your application server. Finally, be sure to check out Dojo Toolkit, probably the most mature AJAX based API currently available. It dramatically simplifies the process of developing AJAX applications.

KExtProcess: Part 1

kconfigure, my KDE build management tool, uses KProcess for its handling of automake, qmake, and checkinstall functionality. It does this because fundamentally these tools are command-line driven tools without a library interface for C++ to work with. The problem with KProcess is that, while it is probably the most powerful command-line processing library available, it is still very limited. Evidently I am not the only one with this problem as Martijn Klingens has released his updated KProcess-like tool KExtProcess.

The beauty of KExtProcess is that it not only handles command-line communication processing (i.e. STDIN, STDOUT, STDERR, etc..) but that it is network transparent. It also supports the concept of “profiles” that allow you to string together commands into a single “profile” that is loaded before the process is started. This allows things like: ssh’ing from one machine, to another, to a third before running a command locally on that third machine; or remotely accessing a machine as a one user, and then su’ing to root before beginning your process as root. While KExtProcess is still in its early stages, it will, no doubt, quickly achieve its place alongside KIO and DCOP as one of the powerful *nix desktop technologies in existence.