<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8390064019981582628</id><updated>2012-01-07T04:06:54.290-08:00</updated><title type='text'>Maverick Software Development</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-53717998405293778</id><published>2008-01-21T21:18:00.000-08:00</published><updated>2008-01-21T21:22:06.295-08:00</updated><title type='text'>Maverick Software Development Model</title><content type='html'>(April 1, 2004)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Abstract&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Maverick Development Model is concerned with identifying the best practices for a given situation. A model development process is one that produces the correct development process for the current situation and constraints.&lt;br /&gt;&lt;br /&gt;A model of development differs from development methodologies (such as Waterfall, Spiral, or Agile) in that the goal or desired outcome is the driving force, ever present, and never forgotten. Methodologies are approaches to achieving goals, but to often the reason for the steps of the methodology have been forgotten and no one knows the reason things are done except that the method requires it.&lt;br /&gt;&lt;br /&gt;There are many good practices that have been accepted over the years and some of them will be presented as well as personal insights and philosophies concerning the software development process and the roles that make it up.&lt;br /&gt;&lt;br /&gt;It is time for software developers to become computer scientists. The computer scientist is a role that encompasses all of the responsibilities necessary to complete the tasks of software development.&lt;br /&gt;&lt;br /&gt;It is time for managers to become leaders and to forgo the methods of management that do not improve the development process. The process exists to help the workers and not the other way around were the workers are there to satisfy the process. The tail should not wag the dog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since 1987 I have been participating in software development. I have watched the struggle between the programmers and product marketing, where the later sets the features and the delivery date and then complain about the quality, missed dates, or missing features. This struggle still exists and remains basically unchanged to this day.&lt;br /&gt;&lt;br /&gt;I have witnessed the introduction of management to the software development process. This management consisted of processes with the idea of making the software development predictable, traceable, controllable, and manageable.&lt;br /&gt;&lt;br /&gt;Several times over my career my various employers have trained me to perform formal reviews and in all of the roles of a review session. At each company, after the training and within a few short weeks, the review process ceased and the programmers went back to their old ways.&lt;br /&gt;&lt;br /&gt;I have witnessed the acceptance and use of waterfall methodologies and their many variants. I have watched management follow the methodology with only the rigor that a true manager can attain. The requirements were gathered by product marketing and from that a design was made. This design became a hard and fast contract. However the design seemed to be used more as a defense exhibit (CYA) because every product date was always missed and development dragged on with no apparent end.&lt;br /&gt;&lt;br /&gt;I have watched the release dates for the product set by the next occurrence of COMDEX and not by anything that actually pertains to the development of quality software. I have personally asked for requirements to be updated while in the development stage of the life cycle only to have management say that the waterfall method did not allow you to go back and change anything. I was flabbergasted! "The method doesn't allow" is a statement that just doesn't make sense. A method is not alive and does not make choices or demands. Management didn't allow the change because they didn't understand the goals the method was trying to reach. Management didn't allow the change because they can't change the process because they didn't understand the development process in the first place. As hard as I tried to indicate that changes were needed it was like talking to the wall. Where are we today? I feel we have made some evolutionary improvements that place us at a point to achieve revolutionary improvements. The idea is to recognize goals and create custom processes to achieve those goals for the current situation. One shoe does not fit all.&lt;br /&gt;&lt;br /&gt;While working for the Department of Energy I struggled with the lack of contact the developers had with the customer. As a developer I felt completely out of touch. I had a written description of what they wanted. The description captured the letter of the law, but I had no feel for the spirit of the law. In 1992 I presented this analogy to my colleagues.&lt;br /&gt;&lt;br /&gt;"Once there was a famous painter who was retained by the head of a European State. His time was so valuable that there was an assistant assigned to the artist. This assistant was to go out and find work for the artist and to gather the description of the desired painting. The assistant met with a wealthy merchant and convinced the merchant to commission a painting of his son. The assistant promised the painting finished in three weeks and returned to the artist. The assistant described the merchant's son to the artist and the artist painted a young boy in a silken blue suit holding in his hand a hat with beautiful plumage. The assistant took the painting to the merchant who agreed that the painting was exceptional but in reality it did not look anything like his son and that he wanted his son painted with is brother standing in a lane by a tree outside of their home. Needless to say the artist never delivered exactly what the merchant wanted. Each version became closer to the desired outcome but never just right."&lt;br /&gt;&lt;br /&gt;My argument was that computer programming is only one small piece of the training received at the University. I hoped that we could be more than just a programmer; I hoped we could be a computer scientist. I wanted to apply what I had learned in requirements gathering, systems analysis, effort estimation, and design as well as write the code. However, my skills in writing code were expensive to acquire and my employer deemed my time too precious to be spent doing non-programming tasks that could be delegated to less expensive employees.&lt;br /&gt;&lt;br /&gt;Also I have dealt with another extreme where managers that thought the developers where "prima donnas" that did not work hard, that waited until the project was well beyond the point of no return and then asked for raises and stock options and held the company hostage. Also the managers thought the engineers padded their dates so they could take it easy. There where managers that said they were sick of the attitudes of the developers and that if they were not happy then they should just leave because they are easy to replace.&lt;br /&gt;&lt;br /&gt;If it wasn't enough to have managers without any real understanding of how to develop software I have watched developers dup management into believing heroics are required to develop software. Duped into believing that there is only a few that can develop the product and the rest of the developers are to take supportive roles. I have watched these clever developers build empires to protect themselves and become the very prima donnas that management complained about.&lt;br /&gt;&lt;br /&gt;I have seen excellent developers black balled by these empire builders because the empire builders realized that this person was skilled enough to replace them. I have watched these empire builders wait for a power vacuum to occur and rush in and fill the gap. I have seen them target other developer's features that are late and secretly criticize the developer. Then, while the developer's reputation is in doubt, the hero works many late hours and rewrites the feature and presents it to management who in turn praises their effort and commitment to the company. The other developer is then regulated to a subservient position and is basically layoff fodder for the next round.&lt;br /&gt;&lt;br /&gt;I have watched managers closely and found that very few managers excel at their task. Why? Leadership was the original goal, and management somehow was adopted. If a manager does not write code then what does he bring to the development effort? I have noticed that most managers consider their job to be reporting state in meetings. Therefore, they are only working when they are generating reports that capture the state of development and when they are in meetings presenting their reports. Managers are rewarded on their reporting skills and thus the amount of reporting grows beyond their ability to control. Then they assign the developers to help by making intermediate reports that will be used as sections in their master reports. Soon developers are spending one or two hours a day generating reports of the current state of the development effort. That state of the project has changed before the report is finished and the report captures only a ghostly representation.&lt;br /&gt;&lt;br /&gt;In 1997 a friend gave me a copy of "Maverick: The success story behind the world's most unusual workplace. Ricardo Semler. Warner Books. 1993." I never read books on other people's success stories because I always figured that the revenue from their book was their success story. I reluctantly began to read the book and soon found a kindred spirit in Mr. Semler. Everything he said made sense to me, even though his business was in manufacturing. I could see benefits for software development. Eagerly I summarized his book and presented it to management. They laughed at the idea of publicly known salaries. When designing a new workspace for development I suggested that they give the developers a budget and let them pick their desk and chair. They responded that the furniture was an asset of the company and that the developers would pick a hodge podge arrangement that would look terrible. Wow, it was almost word for word from Semler's book when they were trying to select uniforms for their workers. I name my development model after his book, the Maverick Development Model. Mr. Semler has never met me, and the name does not mean to suggest he has supported this effort or endorses it in any way. It is my way of giving credit to one that has inspired and reinforced my ideas.&lt;br /&gt;&lt;br /&gt;After being formally mocked for presenting the Maverick concept I went about my work trying to inject those ideas into the environment whenever the possibility presented itself. Needless to say, I was more often labeled radical, a loose cannon, and someone that had no idea of how real business works. After several years of frustration I decided it is easier to be quite and draw my paycheck. I lost all love for the software development process and kept my head low to avoid the laser-targeting sights of the layoff assassins.&lt;br /&gt;&lt;br /&gt;Since I was unhappy with anything to do with the process I focused solely on object-oriented development and how to model systems in a way that the code was easy to maintain and be bug free. Before agile methodologies required unit test I had a personal policy of testing each piece of my code before introducing it in the system. My rationale was, if you don't have any confidence in you own code then how can you determine where a bug lies when you integrate your code with someone else's? I felt each piece of code had to be solid so that you can build upon it. You had to have confidence in some piece of the system; otherwise you will never know if you fixed a bug in the right place. For example, if the compiler is suspect, the third party libraries are suspect, the code from the rest of the team is suspect, and your code does not have some proven level of quality, then when the system fails where do you look for the problem? I have heard "compiler bug" cried probably a hundred times. In all of those, I have seen it to be the case only twice. Why do I share this? Because the evolutionary path that has led us to Agile process and Test Driven Development has be trodden by many of us.&lt;br /&gt;&lt;br /&gt;This rationale of building on a solid foundation came from a few years of porting code. I have seen the memory manager rewritten too many times. You remember the guys that said, "You can't use alloc, it is inefficient. I read somewhere that you have to write your own to get any kind of performance from dynamic memory allocation." Always the reason was to improve performance. This piece of code then became a roadblock in the porting effort. Also, the code required the complete attention of a developer. I would say, "We are not in the operating system services business. We shouldn't be rewriting what the OS should provide. If the OS is not working, then develop to a better platform and quit supporting this garbage." They dismissed my comments as to hard-line. But I learned that we did not have a solid foundation because of all of the in-house developed services. The core service of memory management was now always a suspect. Many bugs were found in the memory manager. When something didn't work, were did you look for the problem? You had to go to the lowest layers and verify that the memory manager was not the source of the problem. Ironically the memory manager became the bane of the main platform as well. The system was taken to Intel to profile the product and suggest improvements. They pointed out that one of the trouble spots was the proprietary memory manager. It did not perform as well as the standard memory manager provided by the current version of the OS on the current hardware. The reason was that the OS people continued to develop and improve their services and to optimize their services for new hardware. The proprietary version, once debugged, was left "as is" and in a few short years become obsolete for the advances in hardware and operating systems. I relate this story because it is necessary to recognize the facets and subtle interplay in software development that the development process must recognize and support. If the memory manager would have had regression tests then it would not have been a suspect with every bug. If the developers would have delivered on the core business instead of optimizations of OS functionality they would have been better off in the long run. Agile has concisely described this as building the functionality that delivers value first, do it with the simpliest implemenation that meets the requirements, and use a test first design technique.&lt;br /&gt;&lt;br /&gt;Since those times of which I described there have been some events that have occurred and set the stage for Maverick Development. One is the development of Java. The other is the acceptance of what is now termed Agile Methods.&lt;br /&gt;&lt;br /&gt;Java has helped by reinforcing my idea that you shouldn't develop services that the OS should provide. This may be termed "don't reinvent the wheel" but it is much more than that. It is about letting others have their core business and trusting that they might be just as smart as you. It is amazing that the developers that were so concerned about performance and writing their own memory manager would ever accept Java.&lt;br /&gt;&lt;br /&gt;Java was slow compared to anything we had seen for years. So, why did the same engineers that wrote their own memory manager embrace Java? Because, it was time to rewrite the system again or they wouldn't have a job! They had to sell management on another version of the product. They dropped the old buzzwords of web services, n-tier, peer-to-peer, and all the others. Regardless of the reasons the acceptance of Java has opened the door for me to try again to change the way software is developed. I have been quite for too many years. I love software development and it is time to present ideas and hopefully start meaningful discussions that lead to a revolutionary change in software development.&lt;br /&gt;&lt;br /&gt;Agile methods have really helped in motivating me to gather my ideas and write this document. Honestly I am really shocked that agile methods have been accepted. The agile methods are addressing the same issues I have been concerned with for years. One of which is that of "the process doesn't allow us to go back and change the requirements." Finally in the name of agility you can go back and fix things that are wrong and work in a reasonable manner. But alas, as soon as you specify your ideas as a methodology, and there is some missing step for a specific situation, some manager that only knows the letter of the law will still say, "you can't do that, the process/methodology doesn't allow it." I have been doing research on XP for large teams and XP with Integration Testing. I have found many statements like, "XP doesn't do that" or "XP only does unit testing and Integration testing has to be added in a Waterfall fashion." Why do these managers "lock" XP down? I feel they lock it down because they do not understand the real problems and the appropriate solutions.&lt;br /&gt;&lt;br /&gt;It reminds me of a 300 level fine arts class I had in college. Being a CS major and having artistic skills are not common and the application of logic to art is probably not something the Art Department was accustomed to. I remember learning of the masters, the great artists that had created a new style and had altered a norm and had become famous for their unique perspective and talent. Then in art class the instructor teaches you how to hold the brush in your hand, how to make the strokes, how to portray depth, how to do each and everything and then grade you on your conformance. If I painted just like Picasso then I would never be famous. I would be another painter that painted like Picasso. I had been taught what made a great artist and then told not to do the very things that made them great. I had been exposed to the model but taught to follow the method.&lt;br /&gt;&lt;br /&gt;Why do I go into these past experiences? They form the foundation of my reasoning. I have always said, "It takes a village to make a village idiot." Without the foundation of understanding then methods are followed for the wrong reasons. I heard this story once.&lt;br /&gt;&lt;br /&gt;A woman was cooking a ham. Her daughter-in-law notices that she cuts the ends off of the ham before baking it. She asks why. "Because it makes it taste better." Does it really make it taste better? After some investigation it was learned that the reason why she cut the ends off of the ham is because her mother did the same. The reason her mother did it was because she had seen it done by her mother. The reason the grandmother did it was because her baking pan was too small to hold the ham unless she cut off the ends.&lt;br /&gt;&lt;br /&gt;Why do software development methodologies have the steps that they do? In the beginning the reason for the method was known. The key is that reason must not be lost and must be understood.&lt;br /&gt;&lt;br /&gt;As computer scientists, instead of just developers, we have been trained to act in all the roles of software development. If your software process falls short in some area, we can fix it. We can have emergent processes if managers will get out of the way and if developers can wake up and become computer scientists and if we will work towards a goal and take whichever road gets us there. Life may be a journey and the road taken important, but software development is a destination. We have to lay down the pride, we have to give up the heroics, and work as a team. I guess this means we have to understand what work is. We have to understand why methods exist and what goals they are trying to achieve. We have to wake up and be thinking individuals that question everything and that do not want fame for anything.&lt;br /&gt;&lt;br /&gt;Maverick Development is about goals and understanding. It is about accomplishing the goal the best way possible at that time. It is about changing anything and everything including the way you work, the way you think, and the way you interact with others. It is about removing dead end jobs. It is about real rewards. It is about trust and selflessness.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Work&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Work is something that we all know when we are doing it and we also know when we are not. However, to give a firm explanation of one's work is difficult. Work is physically described as a force applied through a distance. In creative processes there is no physical object to be moved. That is why effort is used to describe creative work. Distance is also a non-physical attribute of creative work. Progress is used to describe this aspect. So, with effort and progress we work.&lt;br /&gt;&lt;br /&gt;In a methodology, work is anything that progresses from the current step to the next. In a model, work is anything that finishes some attribute or artifact of the goal. Thus said, work on a method is very different than work performed on a model.&lt;br /&gt;&lt;br /&gt;Traditionally one of the tasks of management is to measure work. The measurement of work is an intrusive inspection that interferes with the work that is being measured. The benefits of measurement should out way the costs of acquiring the measurement. If measurement activities are not worth the effort to perform then why continue to measure in the same way? Think and change it. Make it worth the effort. I often wonder at what point thinking was disallowed. It sure seems like it has been disallowed.&lt;br /&gt;&lt;br /&gt;Developers are smart and once they learn the rules of a game they try to win. When developers are monitored and their performance measured, they learn to perform by what is measured. If lines of code are measured, you will get lines of code. If number of bugs found is the measurement, they will find bugs. The problem is we have forgotten why methods measure these things. Management wanted to measure quality and then they created a process. Somewhere down the road we ran amuck.&lt;br /&gt;&lt;br /&gt;The measurement process uses terms like defect discovery rate and whether or not it is decreasing. It was anticipated that if the defect discovery rate is decreasing then the quality of the product was increasing. There are a lot of assumptions here, especially that all bugs are created equal. If one thousand bugs where found and eliminated and the product ships with just one bug and that bug manifests itself you have a problem, especially if that one bug happens to loose and corrupt data.&lt;br /&gt;&lt;br /&gt;Even algile processes are not perfect. Agile and iterative processes have the expectation of seeing the additions of new code into the product to be rather constant over the iteration. Instead we see that the last three days of the iteration the number of new or modified files in the system increase dramatically. Why? It could mean many things. Managers readily accept conclusions from journals and well-known experts instead learning the current reason behind the problem for themselves. Without the understanding of reasons the ability to correctly apply the lessons of these experts rarely happens. Simply said, "You can't rely on books, papers, and publications to solve your problems. You have to get in there and figure things out for your specific situation and this requires understanding of the process and how work gets done."&lt;br /&gt;&lt;br /&gt;In reality the check-in rate could be the symptom of any number of problems. Maybe the iteration is to long or the build process is too painful. Maybe integration is too painful. It could be that the Use Cases where unclear and too much time was needed to design the code. Maybe it was dependencies on other modules such that coupling became a bottleneck. This list could go on and on. Most likely the reason is not simple, but is complex and there are many reasons that differ from each team and each person. There is no simple fix and there might not be a complex fix. It might be the fact that this is the way it is.&lt;br /&gt;&lt;br /&gt;My point is that it takes more than methods and management to understand the development process and to identify when progress is being made and when work has been done.&lt;br /&gt;&lt;br /&gt;In Maverick Development work is defined to be any task that moves things forward to the ultimate goal. Most processes do not measure time spent helping other team members. Traditionally if help has been given to a team member it is not unusual to label the person that needed help as a weak link. Being labeled a weak link is like putting strawberry jam in your pockets because in the next layoff you are toast. So, people will not ask for help. Is that what management wanted? I doubt it. This is what they get and often they cannot recognize the environment they have created. In Maverick Development helping another developer get work done is work. Helping the team move forward is work. It does not affect the person's task list in a negative way. If the person does not finish their tasks for the iteration yet they worked hard on unforeseen tasks then the person is still successful and considered a great worker.&lt;br /&gt;&lt;br /&gt;When helping others is not rewarded you will see symptoms of it. You will hear developers say things like, "I didn't get anything done today because of interruptions" or the person that needs help will passively say "I hate to bother you right now for some help but I am stuck" or they will only ask for help through non-intrusive manners such as e-mail.&lt;br /&gt;&lt;br /&gt;Work together and be concerned for others success. If managers are counting and measuring, then developers will only work on what is being counted. If there is no metric on how many others you helped to be successful today, then no one will help others. Maverick Development demands less measurement OR it demands management to truly measure work, which would be a very difficult task that most managers are not up to. Maverick development raises the bar on management.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Computer Scientist&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The developer has to be more than just a code writer. The bar is raised on the developer. For lack of a better term I say the developer must become a computer scientist. I chose the term computer scientist because during my formal education as a computer science student I learned all the aspects of developing software. I learned about programming languages, algorithms, requirements gathering, quality assurance, effort estimation, software cost, motivating programmers, ...&lt;br /&gt;&lt;br /&gt;The computer scientist is a leader in the area of software development. The computer scientist understands that heroic efforts can destroy teams and skew business perspectives into believing heroics are necessary. The computer scientist understands when to use multiple inheritance. A computer scientist understands runtime behavior as compared to static behavior. A computer scientist understands the costs of coupling and poor cohesion. The computer scientist understands activities that improve productivity and activities that slow things down.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Management&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First I need to define the type of manager to which I will refer. Historically developers have been promoted to team lead, then manager, then director, and on up the ladder. I have also noted there are two paths to manager. The other path comes from the business side of the company instead of the technical side. In the organizations I have experienced often the manager has a technical role. The manager reviews and approves designs and architectures. Also the manager choses the development methodology, the amount of reporting, the format for meetings and documents, coding styles, and other things that directly relate to the development process. In addition to these responsibilities these managers also perform reviews, do budgets, and report status. The manager often uses the position to inject their desire in one situation and delegate when they have no opinion. This inconsistent use of position is not helpful.&lt;br /&gt;&lt;br /&gt;Management has to come to its own in the Maverick Development Model. What does this mean? They have to have clear understanding of all of the aspects of development. First they have to understand each individual. Why, because they are managing people, they are not managing skill sets and resources. Everyone communicates in different ways. Everyone expresses concern in different ways. Everyone is motivated in their own way. I would imagine that a good manager , like a good poker player, can read a person as well as listen to a person.&lt;br /&gt;&lt;br /&gt;Managers have to understand why different methods and practices are available and know which practice to apply to a situation. Managers are too often like the ship's captain that knows nothing about sailing. As long as the wind blows the ship along the right course everything is fine. However, as soon as there is a problem that requires knowing how to control a ship the so-called captain is in trouble.&lt;br /&gt;&lt;br /&gt;The skill set of a manager has to be greater than the average developer on the team. A manager in Maverick Development must become a leader. A leader is much more than a manager.&lt;br /&gt;&lt;br /&gt;Patton was a military leader. He did not care if politicians were pleased with him. He did not care if people did not like him. The Vietnam conflict was managed. It was not lead. The difference is clear. The "feeling" about the situation is almost tangible. Vietnam was managed and the methods were political and had nothing to do with winning a war or fighting for values. The managers of the Vietnam War talked in statistics. How many shots fired. How many casualties. How many sorties. How much money had been spent and are we within our budget.&lt;br /&gt;&lt;br /&gt;From Mr. Semler's book I paraphrase and quote a section concerning management.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"...Fernando was convinced that the Hobart plant lacked organization, ambition, and the necessary controls. He would arrive at 7:30 a.m., to find himself alone in the office until about 9:00 a.m. At 5:30 p.m. people would leave for home and Fernando would stay until 9, 10, and sometimes 11 p.m. This didn't please him and everyone knew it.&lt;br /&gt;&lt;br /&gt;Many others worked long hours too, and their families were beginning to complain. They were convinced that the hours were temporary, until the company had digested its acquisitions. 'It took us almost a decade to learn that our stress was internally generated, the result of an immature organization and infantile goals.'&lt;br /&gt;&lt;br /&gt;Fernando was firing people and changing things constantly.&lt;br /&gt;&lt;br /&gt;'At the Hobart plant, and all over the new Semco, we could track with great precision virtually every aspect of our business, from sales quotes to.welding machines. We could generate all sorts of reports almost instantly with dazzling charts and graphs.. (I)t took us a while to realize that all those numbers weren't doing us much good. We thought we were more organized, more professional, more disciplined, more efficient. So,.how come our deliveries were constantly late.'&lt;br /&gt;&lt;br /&gt;Work hard or get fired was the new motto. Everyone was being pushed forward instead of being self-propelled.&lt;br /&gt;&lt;br /&gt;'During this time I often thought of a business parable. Three stone cutters were asked about their jobs. The first said he was paid to cut stones. The second replied that he used special techniques to shape stones in an exceptional way, and proceeded to demonstrate his skills. The third stone cutter just smiled and said: "I build cathedrals.'"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Leadership&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Maverick Development is based on leadership. Leadership is something above management. All leaders have management skills. The converse is not true. The bar has to be raised on managers. They have to be leaders.&lt;br /&gt;&lt;br /&gt;Agile methodologies depend upon emergent processes. Managers cannot control this type of process because of its very nature. Maverick Development goes where ever is necessary to get the work done. When an unexpected situation arises we do not plod along the same path just because the directions say to go that way. Instead, in Maverick, we say, "Hmm, an unforeseen problem. What should we do? Go on? Go back? Go around? ... "&lt;br /&gt;&lt;br /&gt;Leadership cannot be taught. Quoting Dr. Huge Nibley,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"At the present time, Captain Grace Hoper, that grand old lady of the Navy, is calling our attention to the contrasting and conflicting natures of management and leadership. No one, she says, ever managed men into battle, and she wants more emphasis on teaching leadership. But leadership can no more be taught than creativity or how to be a genius. The Generalstab tried desperately for a hundred years to train up a generation of leaders for the German army, but it never worked, because the men who delighted their superiors (the managers) got the high commands, while the men who delighted the lower ranks (the leaders) got reprimands. Leaders are movers and shakers, original, inventive, unpredictable, imaginative, full of surprises that discomfit the enemy in war and the main office in peace. Managers, on the other hand, are safe, conservative, predictable, conforming organizational men and team players, dedicated to the establishment.&lt;br /&gt;&lt;br /&gt;The leader, for example, has a passion for equality. We think of great generals from David and Alexander on down, sharing their beans or maza with their men, calling them by their first names, marching along with them in the heat, sleeping on the ground and being first over the wall. A famous ode by a long-suffering Greek soldier named Archilochus, reminds us that the men in the ranks are not fooled for an instant by the executive type who thinks he is a leader.&lt;br /&gt;&lt;br /&gt;For the manager, on the other hand, the idea of equality is repugnant and indeed counterproductive. Where promotion, perks, privilege and power are the name of the game, awe and reverence for rank is everything and becomes the inspiration and motivation of all good men. Where would management be without the inflexible paper processing, dress standards, attention to proper social, political and religious affiliation, vigilant watch over habits and attitudes, etc., that gratify the stockholders and satisfy security? ... Managers do not promote individuals whose competence might threaten their own position, and so as the power of management spreads ever wider, the quality deteriorates, if that is possible. In short, while management shuns equality, if feeds on mediocrity... For the qualities of leadership are the same in all fields, the leader being simply the one who sets the highest example; and to do that and open the way to greater light and knowledge, the leader must break the mold. " A ship in port is safe," says Captain Hopper, speaking of management, 'but that is not what ships were built for," she adds, calling for leadership... True leaders are inspiring because they are inspired, caught up in a higher purpose, devoid of personal ambition, idealistic and incorruptible... So vast is the discrepancy between management and leadership that only a blind man would get them backwards... "&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It is a common known practice when hiring and retaining software engineers to retain what is referred to as the 10x performers. Maverick Development requires the same from its Leadership. Managers that are leaders will be 10x performers.&lt;br /&gt;&lt;br /&gt;Trust is the key and here is what Mr. Semler had to say,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"We simply do not believe our employees have an interest in coming in late, leaving early, and doing as little as possible for as much money as their union can wheedle out of us. After all, these are the same people that raise children, join the PTA, elect mayors, governors, senators, and presidents. They are adults. At Semco, we treat them like adults. We trust them. We don't make our employees ask permission to go to the bathroom, nor have security guards search them as they leave for the day. We get out of their way and let them do their jobs."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Performance Reviews&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Maverick Development changes the traditional performance review process. The goal is to truly review the performance of the team and the individual. Each person's performance is reviewed by each member of the team and this includes the team leader. There is no protection because of hierarchy, title, or rank.&lt;br /&gt;&lt;br /&gt;For more information read Maverick Reviews.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Compensation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In Maverick Development, compensation is public knowledge within the company. Mr. Semler points out executives with high salaries should be proud of their salary and confident that they are worth it. If they are not confident they are worth their salary then they will be inclined to hide it.&lt;br /&gt;&lt;br /&gt;For more information on compensation please read the section entitled "Compensation" in Maverick Hiring.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Meetings&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In Maverick Development all meetings are to have an agenda that is known before hand by all attendees. The agenda should be concise and if the meeting is to be one of discovery then state that fact.&lt;br /&gt;&lt;br /&gt;I have attended to many meetings where some important and complex idea is briefly presented and management unexpectedly asks for opinions and if there aren't any they will move to the next topic. This unfair tactic does not produce the proposed desire of gathering more information. Prior to the presentation, management has taken as much time as they saw fit to discuss the matter and formulate their solution. Then they come to a meeting and blind side the entire team with a topic that is usually nontrivial. Do they really expect valid input? It is like they are saying, "Okay you have five minutes, be creative starting now!" Or is it a paternalistic approach and they are satisfied with the stupid looks and blank stares? This approach does not meet any goal and is not part of Maverick Development. Present a decision as just that, a decision. Present a proposal as that and give people time to prepare for suggestions.&lt;br /&gt;&lt;br /&gt;In Maverick Development there is never a lunch meeting. Lunch meetings are rarely necessary. Downtime is essential, and if you want to have a lively mind for the afternoon then you may want to take a break at lunch. Do you ever feel that lunch meetings are used to squeeze and extra hour out of the day? How often have you attended a lunch meeting and then afterward you still take a lunch break? Any manager that calls a lunch meeting is to be gibbeted in an iron cage outside of the conference room for all to see just like what happened to Captain Kid.&lt;br /&gt;&lt;br /&gt;The 15-minute standup from XP is sufficient to relay the current state of development. Details are not necessary. If there is a problem, then the details will be addressed by all those who can provide a solution to the problem. If things are on track, no one cares to hear about each item and how "on track" it is. State is the key, not details.&lt;br /&gt;&lt;br /&gt;It seems that some managers only produce two things that are their work products. One is meetings, the other documentation. Maybe three things, the third being carbon dioxide. The documentation becomes the information presented in the meetings. These items include endless spreadsheets and huge step-by-step procedures on how the process is to be maintained. (Remember in the abstract the comment of the tail wagging the dog!) When a manager is in a meeting he is working. A developer is considered to be working when he is writing code. If a developer is in a meeting he is not working. If a developer is filling out some status report for management, he is not working. When they are doing these tasks, they are doing management's work.&lt;br /&gt;&lt;br /&gt;The goal for a status meeting should be to determine the state of the project. Not to pour over minute details. The XPM methodology states:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"...meetings with the Product Manager and the Steering persons should be context not content. Have the success expectations changed? Is there any change to the scope/objectives? Have there been any changes in the stakeholders/related projects? Are the benefits and cost assumptions still relevant? Are benefits-realization plans still relevant? Has quality been changed? Are there changes to project risk or risk management issues? In other words, is the project still FOCUSED on the right business outcomes?"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a method of achieving the goal of reporting the state of the project. Since Maverick Development is goal oriented, and any method that achieves the goal is fine, then this or any other way to discover the state is within the Maverick model.&lt;br /&gt;&lt;br /&gt;If there is not a goal, and there is not an agenda, then there is no meeting.&lt;br /&gt;&lt;br /&gt;In Maverick Development meetings that deal with details instead of status are called by those who can do something with those details. Developers call meetings on details to discuss problems in detail with peers and individuals that can create a solution, not with people that conduct meetings. When managers attend these meetings they try to do the tricks of their trade such as injecting comments to stimulate thought and regulating the conversation to facilitate communication. Stimulate, regulate, and facilitate, and managers hate developers that can't produce tangibles. Go figure.&lt;br /&gt;&lt;br /&gt;Managers interrogate to find the details of the state of the process. Leaders investigate and recognize on their own. Interrogation is intrusive. It takes to much time. It removes people from their real work.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Documentation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One reason documentation exists is because someone was trying to meet the goal of communication. Documents are created so that things do not have to be said over and over. Documents state things that are fixed, wrote down, and locked in state, thus the term statement.&lt;br /&gt;&lt;br /&gt;When documentation does not meet the goal of communication then the document should not exist. If the document is not read then it clearly has not communicated anything and it should not exist. How many of you have ever put some comment in your weekly report to see if anyone was actually reading them? I have and many times I have not received any response from my manager. Clearly that report was not necessary. When my manager is busy doing what he really thinks is important he is not reading fifty status reports. Since in Maverick Development reviews are not done solely from the top down it cannot be said that status reports are required for the review process.&lt;br /&gt;&lt;br /&gt;One approach that achieves the goal of conveying weekly status is just these three statements: on target, concerned, in trouble.&lt;br /&gt;&lt;br /&gt;If the state is anything but on target, managers will then ask the obvious question, "Are you taking the appropriate action to rectify the situation?" How many times have managers pointed out the obvious?&lt;br /&gt;&lt;br /&gt;In Maverick development there is one place to report status. There is not a team dashboard, and a textual weekly report, and a management spreadsheet. There is only one of these items, or some other single reporting method. If someone wants to generate a new report including other items, then they are responsible for the format and media difficulties, they cannot make this an assignment to others. The tail can't be allowed to wag the dog.&lt;br /&gt;&lt;br /&gt;For more information on documentation please read Maverick Documenation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Release Dates&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Release dates in Maverick Development are based on real goals and supported by development.&lt;br /&gt;&lt;br /&gt;In Maverick Development there is no "release date by trade show". How many times have you had a release date for a product set by product marketing to be for the next trade show? Where is the basis on that choice? They will tell you that if you miss that date we will miss our window of opportunity. The ability to market and display a product at a trade show is advantageous. However it is not sufficient to require the release of a product based on date alone. If the original time estimation for the set of features places the release date beyond the trade show then the feature set must be changed to correspond with the shorter development time.&lt;br /&gt;&lt;br /&gt;Release dates are based on budget, features, quality, and timing. Product management will always try to set the date for release, the number of features in the release and the quality for that release. Well, everyone knows they can only choose two of the three. The third is always a variable.&lt;br /&gt;&lt;br /&gt;Maverick development says that there are only two choices that are variable and that third, quality, is fixed. You can pick the features or the release date, but not both. Quality is always set at high. That never changes. No one will accept low quality. If you relax quality then you have opened the door for your competition to take your market share by merely reproducing the same functionality with improved quality. You have to have high quality so that the purchase decision is based on such things as features and solutions.&lt;br /&gt;&lt;br /&gt;In Maverick development a goal can be set to reach a certain point in the production by a certain date. Since Maverick is based on real work, and doing work right, then it really doesn't matter if the date is not met. Work has really occurred and real progress was made. Goals are essential for a target. If the goal is to far out there, it is hard to hit. Should we get down on ourselves if we miss it? No. Why not? Because Maverick Development produces real work every day. In reality software is done when it is done. The scope can be reduced and thus you can be done sooner. Maverick Development supports these simple facts. Motivating development to work hard every day is the responsibility of the leaders of the development team.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since Maverick Development is goal driven, the goals for the development process are essential. If a goal for development is to respond quickly to changing requirements then an agile development methodology could meet this goal. If you were trying to get awarded a government contract then a process based on SW-CMM could be the means to the end. Now, one would say, Maverick development is really nothing. It doesn't tell me how to do anything. The point is, you should be a computer scientist and you should already know how to do something or have the ability to learn how to do something for your current situation.&lt;br /&gt;&lt;br /&gt;Maverick development opens the door for leadership and for understanding why methods exist and the real issues the method addresses. I am currently working on a Maverick Development Methodology for Agile Development. Maverick Development Model means there is a goal to be reached. If the method is not the right one you are not stuck. If you are not progressing, or if there is something missing, or whatever the problem is, Maverick says you must do something about it. You must apply your skills as a computer scientist. You must apply your leadership capabilities. Maverick Development Model addresses the issue of people that live by the letter of the law and not the spirit. It is out of the box thinking, but it shows that you have to have skills, knowledge, and understanding to survive out of the box.&lt;br /&gt;&lt;br /&gt;Maverick Development demands that people are worth their salt. Reviews are going to happen and you had better be ready. Managers are not protected and leadership is the goal. Managers cannot promote mediocrity in Maverick Development. Managers cannot protect themselves from the movers and shakers. They cannot create empires. They cannot reward those whom please them and remove those whom do not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-53717998405293778?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/53717998405293778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=53717998405293778' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/53717998405293778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/53717998405293778'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/maverick-software-development-model.html' title='Maverick Software Development Model'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-686137898771189346</id><published>2008-01-21T21:16:00.002-08:00</published><updated>2008-01-29T07:50:53.433-08:00</updated><title type='text'>Software Development Methodology for Large Teams</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Abstract&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Maverick Methodologies are guided by these steps:&lt;br /&gt;&lt;br /&gt;    * &lt;span style="font-weight:bold;"&gt;Understand &lt;/span&gt;the current state.&lt;br /&gt;    * &lt;span style="font-weight:bold;"&gt;Identify &lt;/span&gt;the areas of concern and set goals.&lt;br /&gt;    * &lt;span style="font-weight:bold;"&gt;Consider &lt;/span&gt;all solutions known or available at this time.&lt;br /&gt;    * &lt;span style="font-weight:bold;"&gt;Choose &lt;/span&gt;a solution that meets the goal which is best for this situation.&lt;br /&gt;    * &lt;span style="font-weight:bold;"&gt;Act &lt;/span&gt;upon the choices and adapt or change solutions when it becomes needed.&lt;br /&gt;&lt;br /&gt;This methodology, for large teams, was developed under the following situation:&lt;br /&gt;&lt;br /&gt;   1. Software and System requirements are not all known in advance.&lt;br /&gt;   2. Customer requires high quality in the first public release.&lt;br /&gt;   3. Team members are not all co-located.&lt;br /&gt;   4. The system is made of many components which are in various layers or tiers thus making integration a concern.&lt;br /&gt;   5. The team is made up of over 40 software developers.&lt;br /&gt;&lt;br /&gt;The goals are for improvements in these areas:&lt;br /&gt;&lt;br /&gt;   1. Requirements and Design&lt;br /&gt;   2. Testing&lt;br /&gt;   3. Build Process&lt;br /&gt;   4. Iterations&lt;br /&gt;   5. Off-Site Issues&lt;br /&gt;   6. Development Platform and Setup&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Terms&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2D requirements.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Requirements&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Interviewing to capture requirements as a one time effort has been shown to be difficult and rarely accurate.&lt;br /&gt;&lt;br /&gt;As recommended by most methodologies, having the individuals that know the requirements (the customer) available to development is currently considered ideal. If development is not restricted to one site then consider training individuals to be a customer representative. These representatives are trained by the customer and communicate often with the customer.&lt;br /&gt;&lt;br /&gt;Product requirements must be avaible to development. Colocated development can use index cards and tape them to a wall. Distributed teams may choose an electronic medium. Choose a medium that is easily shared and easily updated.&lt;br /&gt;&lt;br /&gt;The developer requirements must be considered as well. What are developer requirements? The most obvious is that the product requirements can be implemented in software. Other developer requirements may be that the system is testable or the system run on Unix based systems. These requirements along with the product requirements make up what is termed 2D requirements.&lt;br /&gt;2D Requirements&lt;br /&gt;&lt;br /&gt;Suppose the developers are creating an Object Oriented solution. Objects exist to satisfy requirements in two dimensions. The first dimension is that of the real world entity being modeled. The second models the behavior of the object in a computer system.&lt;br /&gt;&lt;br /&gt;There will be methods that meet the requirements for both dimensions. For example you have an object that models a Car. There may be methods like get the color or set the color. These are methods that have to do with the real world object. But the Car object exists in the computer world as well. And in the computer world we do things like compare objects. You normally don't think about saying, is this car equal to that car. But in the computer system such comparisons exist. Therefore, Maverick Agile Development uses requirements for the real world and well as the computer world and these are called 2D requirements.&lt;br /&gt;&lt;br /&gt;In Maverick Quality Assurance (MQA) three requirements are identified that are of this second dimension.&lt;br /&gt;&lt;br /&gt;   1. Object factories. Object factories are needed by MQA to allow for the develoment of test harnesses, stubs, and mock objects that are needed to develop complete unit tests.&lt;br /&gt;   2. Object Validators are validation facilities that examine an object for comformance with required values. MQA component tests needs object validators to check objects returned from a component call.&lt;br /&gt;   3. Object Equivalence Verifier. MQA tests will need to compare two objects to see if the are the equivalent. A test that needs this functionality would be a persistence test. Equivalence can be a difficult problem to solve (e.g. The Record Linkage Problem) and there may be a valid need to relax the definition of quivalence.&lt;br /&gt;&lt;br /&gt;Factories, Validators, and Equivalence Verifiers may not be part of the model for the real world object. However, since the object exists in the dimension of a computer system these are necessary requirements that must be met.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Testing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was involved in the development of a large software product with a large team using common agile techniques that had not matured for large teams. The development division was doing unit tests (some developers did test first, some code first) and a team of developers under the Quality Assurance division was developing the integration tests.&lt;br /&gt;&lt;br /&gt;It wasn't long before the integration developers fell victim to "down stream" issues. The product developers where changing things so quickly that the integration developers were constantly playing "catch-up". Also, the product developer's code had functionality that allowed for unit testing but was lacking functionality for integration testing. The integration developers could not get product developers to add functionality to help with integration tests. Ideas such as making integration developers into customers so that they could drive product requirements was considered.&lt;br /&gt;&lt;br /&gt;The solution I propose is that having those with the domain knowledge perform all white-box tasks instead of an external team. With the requirements continuously being refined, and the design emerging, the transfer of this specific knowledge is too expensive. The product developers don't want to slow down to help or train the integration developers. Therefore, product development is responsible for unit tests and integration tests.&lt;br /&gt;&lt;br /&gt;Many unit tests can be reconfigured to be component tests. If stubs of a unit test are replaced with real components then the test is now exercising the integration of multiple "real" components. Because of this, component tests are more of a build/configuration issue than a seperate issue from unit tests.&lt;br /&gt;&lt;br /&gt;A system is integrated when no mock objects are used in the build and the system passes all of the component tests.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Continuous Build&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;During the development of this large system using many developers it became apparent that there were issues with the continuous build process.&lt;br /&gt;&lt;br /&gt;The goal of the continuous build is to present a version of the product that is always functioning correct for the features implemented. Another goal of the build process is to eliminate broken builds at the main repository..&lt;br /&gt;&lt;br /&gt;This presents a particularly difficult task when the team is large. If a developer updates code from revision control he may only get part of the files of a large "check in" that another is currently submitting.. Transactions are needed to prevent getting only part of the files of a large commit.&lt;br /&gt;&lt;br /&gt;Long running tests cause developers to save up their changes inorder to avoid the wait. When one waits to commit changes increase the conflicts with other changes and cause the developer to get caught in a refactoring frenzy. Since files are changing so often it requires the idea of relaxing the constraint of developing from the "head" of the revision control system.&lt;br /&gt;&lt;br /&gt;I suggest code is always updated from a good build which is labeled as a specific revision. The negative thought comes to mind that people will be working on "stale" code, but on a large team with many changes the code is stale so fast it doesn't matter when you get it. One reason to get from a revision is if the "head" build is broken and you have made changes and you want to update your local code to do a build and run the tests locally before you commit changes. If you update to a broken build you will have to wait until that build is fixed, or rollback to a good revision, or worse yet you don't notice the build was broken when you updated and you think that your changes have broken the build.&lt;br /&gt;&lt;br /&gt;Other processes for updating and committing code can be used. A patch process can be used where the differences of the local files are sent to a build machine and that machine builds the system and if it compiles and passes the tests it is then committed to the "real" build machine (the machine that has the revision control repository). This process can take a long time to perform. On large systems the setting up of test data can take several minutes and the running of all of the tests could be a significant amount of time as well. If you are trying to commit a change that another team member is waiting on it could be a few hours before the changes propagate through the process.&lt;br /&gt;&lt;br /&gt;The continuous build must be as fast as possible. Distributing the build process can help with a patch process. Each feature team (or some topological division of the developers) has a patch build machine. But that alone is not enough. To improve turn around time the builds themselves have to be changed. The ideal is to have a build for a large project (which includes running tests) be no longer than 15 minutes. Doing a clean build in the continuous build process takes to long. For large teams a clean build is done every fourth build or every hour. Interim builds are not clean builds. In the interim only changes and their dependencies are built.&lt;br /&gt;&lt;br /&gt;A goal of the build process is to eliminate broken builds. Before submitting changes to the build process the developer should get an updated version of the system and build it locally and run the tests. Usually this local build would not be a clean build. If the build process is fast enough this step should be eliminated. In Maverick Development you do whatever moves you down the road, and if there no need for a step you eliminate it. This is built on the idea of being a thinking individual that understands the ramifications of decisions and that the individual is concerned and will not do anything to interfere with another team member's ability to work. So, if the build process is a patch process and it is fast enough the local build is redundant.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Iterations and Increments&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The goal of incremental development is to always provide an improving product. Improvements are not limited to added functionality alone. Improvements in quality or performance are valid as well as anything else that is a real improvement.&lt;br /&gt;&lt;br /&gt;For large teams iterations are no more than 3 weeks. It is about planning, refocusing, refactoring, and staying on target. Any more than three weeks is too long to readjust. If there is a concern that the iteration planning takes to much time or is too expensive to do every three weeks, then the way the planning is done needs to be improved.&lt;br /&gt;&lt;br /&gt;There is some overhead in pulling everyone together. If the Maverick Development Model is followed and meetings have goals reflected by agendas and the meeting will be as optimal as a meeting can be. Maverick development is based on an idea that software is done when it is done and there are at least a certain minimal number tasks that will be performed before the software is done. Since these essential tasks will be done no matter how long the iteration it does not slow the development momentum to have short iterations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Offshore/Offsite&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If offshore/offsite teams are used in the development, the iterations are two weeks or less. This increases the communication to a level that is needed for redirection. The problem is that offshore teams suffer from poor communication and may get off target and no one knows until it is late. The method is to use an iterative approach where there is always a working subset of the product until it is developed entirely. With shortened iterations you will be able to use the iteration to quickly see if the offshore team is working as planned and if not to make a course correction. Like other agile methods, this depends on the other processes of the methodology in place. The continuous build is essential for this to work. The offshore team must be working from a shared source base and a patch process will address the build needs for a distributed work force.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Development Platform&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One goal for large development teams is to keep developers up and working and to get new employees setup quickly. While working on this large project I quickly noticed that some developers were using Windows based machines and others were using Linux based machines.&lt;br /&gt;&lt;br /&gt;I recommend the development machines should be setup the same, using the same OS, same versions of the SDK and such, same versions of Ant, Bash, etc. It becomes an unnecessary burden to manage special shell scripts and suttle differences of each platform and configuration.&lt;br /&gt;&lt;br /&gt;There is an argument that if the product is going to be delivered on multiple platforms and configurations it is good to have such platforms and configurations spread about development. This is where Maverick Development comes in and says "Why?" One of the most prevalent arguments for having the various machines is to detect any problems with the product running on the different configurations. That is a valid goal, but the solution of having developers with different platforms and configurations is not satisfactory for large teams.&lt;br /&gt;&lt;br /&gt;With large teams the different development platforms typically find problems with the build process, not the product under development, across the various platforms. The problems with the build become the predominant issue with the different platforms instead of finding issues with the product deployed on various machines.&lt;br /&gt;&lt;br /&gt;The configuration of each development build should be the same. The location of items on each machine should be the same. The environment variables and paths should be the same.&lt;br /&gt;&lt;br /&gt;If the product is to be deployed on differing systems then the continuous build process should build the product on each varied system. The various platforms that will host the product will be maintained by those in charge of deployment tasks. They will keep the various platforms configured and working. Problems that have to do with code will be brought to the attention of the developers. Problems that have to do with configuration and deployment will be handled by the deployment team. The build will be run continuously on all the platforms and any broken tests will be addressed by development. If a particular platform is becoming problematic then maybe it is good that it was discovered early and you can eliminate that platform from the list of supported systems.&lt;br /&gt;&lt;br /&gt;Having an exact setup of the desired deployment environment is not usually possible early on in the development of the product. Bringing the various systems on line is dictated by driving forces such as budget, schedule, hosting facilities, and other important decision factors.&lt;br /&gt;&lt;br /&gt;If the configuration is standard then new employees can receive an "image" that can be easily installed. If a developer's machine experiences hardware trouble the machine can be restored very quickly to a usable state. With the same setup on each machine it is easier to do pair development. The difficulties for large teams are enough and we do not need to add unnecessary difficulties with various configurations.&lt;br /&gt;&lt;br /&gt;Note if the development is in a language like C++ and there are multiple target platforms development will need to have access to these platforms continuously. Languages that have compiler directives and the ability to conditionally specify code for compilation (#ifdef comes to mind) require that the tests be ran on each target platform in order to catch compile time errors. The continuous build process becomes more complicated as well. An important aspect of this methodology is that there is no porting team. The developers are responsible for their code to run on every supported platform. This will give many benefits. One is that they will not write the code in an optimized fashion for their preferred platform. Another is that you do not have two different individuals working on the same code that might interpret the requirements in subtly different ways. When organizing the teams and if continuous pair programming is used, then wisely pair people with experience on different platforms.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Using incremental development and iterations for large teams pose specific issues. Working in such a situation I observed that requirements, integration testing, continuous builds, iteration duration, and machine configuration needed specific recommendations.&lt;br /&gt;&lt;br /&gt;Developer requirements must be considered just as customer/product requirements. Making the system verifiable is a developer requirement. Using object factories, object validators, and equivalance verifiers are part of developer requirements. These developer requirements are another dimension of requirement and are referred to as 2D requirements.&lt;br /&gt;&lt;br /&gt;All white-box testing should be done by the product developers. This includes component and integrations testing.&lt;br /&gt;&lt;br /&gt;Continuous builds become more complex with a large number of developers checking in many changes across many files. The "head" of the revision control system may not be "working" at any given instance. Patch processes and lables are used to help alleviate developers from getting a broken build.&lt;br /&gt;&lt;br /&gt;Iteration length should be no more than three weeks and if parts of the team are off-site then two weeks is recommended as the maximum duration.&lt;br /&gt;&lt;br /&gt;Developer machine configuration becomes an issue with large teams. Each developer should use the same configuration and directory layout. This allows others to easily pair or use someone elses machine. It also allows for the use of an image of the development setup which can be used to setup new developers or restore machines if there is a crash.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-686137898771189346?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/686137898771189346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=686137898771189346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/686137898771189346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/686137898771189346'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/software-development-methodology-for.html' title='Software Development Methodology for Large Teams'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-975045596879066816</id><published>2008-01-21T21:16:00.001-08:00</published><updated>2008-01-29T08:00:52.186-08:00</updated><title type='text'>Hiring and Firing</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Abstract&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Hiring a developer&lt;/span&gt; is a complex task. To hire the best person for the job you must &lt;span style="font-weight:bold;"&gt;understand what job there is to be done&lt;/span&gt;, which &lt;span style="font-weight:bold;"&gt;level of computer scientist is needed&lt;/span&gt; for the job, and what &lt;span style="font-weight:bold;"&gt;level of compensation is fair&lt;/span&gt; for doing the job.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Understanding the Job to be Done&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A clear understanding of the job is essential. This means that the requirements are known and specified as far as possible. This has little to do with the development methodology. I am not talking about big upfront design versus iterative or agile approaches. This has to do with a level of understanding of what is to be built.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Level 1 Understanding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is an idea by a non-computer savvy person. This is when someone says, "I have this idea about a computer program that I want developed." If you ask them, "What platform does this program need to run on?" and they say something like "Windows", did they really mean Windows or did the mean in a Web Browser. This person has no idea of how long it takes to write software and what the expense can be.&lt;br /&gt;&lt;br /&gt;Level 1 understanding requires an Architect level computer scientist. One that understands desktop versus web based solutions. One that can gather requirements, use cases, user scenarios, and design the software and select the development environment and the deployment environment. The correct computer scientist for this job will also understand cost estimation, effort estimation, strategic planning, testing, and all of the other aspects of delivering quality software.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Level 2 Understanding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a person that is computer literate and has an idea for a software product. They are aware of which computer platform on which they want the software developed. They do not understand the cost of software development. They do not know about development platforms, computer languages, open-source solutions versus major vendor solutions. They have no idea that runtime licenses can be hundreds of thousands of dollars.&lt;br /&gt;&lt;br /&gt;Level 2 understanding also requires a Senior Developer or an Architect. This computer scientist is a specialist on the platform that is required. The computer scientist understands the current solutions, tools, and resources available on the specified platform.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Level 3 Understanding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a person that is familiar with software development and has experience in the area. A Product Manager is typically at this level. They are aware of customer needs so the requirements will be specified. They have experience with developers and are aware that estimated dates are rarely accurate and that costs often overrun. They know of these difficulties in software development but they do not fully understand why they occur. They know of the levels of computer scientists and are capable of deciding on which level is appropriate for the task at hand. They are familiar with the capabilities of junior developers, senior developers, architects, and the other roles of software development.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Level 4 Understanding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a person that understands the product to be developed and the details of software development. A Project Manager is typically at this level. This person maybe a former software engineer that has taken a management path in their career. This person could be very current in issues even at the level of writing code themselves, or they maybe a few years removed from the cutting edge development practices but still are in touch enough to walk the walk and talk the talk.&lt;br /&gt;&lt;br /&gt;They know what the job is and what type of person they need to perform the task.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Level 5 Understanding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a person that could do the job. They are typically team leads and senior developers. They are hiring because they do not have the time to do the task themselves. They know exactly what they want. They could do it themselves if they just had the time.&lt;br /&gt;&lt;br /&gt;Knowing your level of understanding is the first step. It is crucial. Those that deny the facts of their understanding will soon learn from the school of hard knocks. Ignoring your level of understanding is the first step that can lead to failure.&lt;br /&gt;&lt;br /&gt;A word to the wise computer scientist comes to mind concerning the point of the employer recognizing their level of understanding. If you find yourself working for someone that you thought was at level 3 or higher and you find them at level 2 or lower you are in for a rough ride. They will not understand why you make requests for resources. They will make decisions purely on rules of budget even if you know the decisions will lead to complete failure. You will have to do something and do it quick. What is that something? You have to educate your employer in software development. Most likely it will not be possible. The employer will view your tactics as a means for you to lengthen your task to take the pressure off of your self. All I can say is good luck. Maybe luck will be with you and your employer will know another computer scientist that they trust which will back you up. I use the word trust here because in Maverick development you will find trust is the key to success. The lack of trust leads to many of the problems in business.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Hiring within your Level of Understanding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you are not at a level 3 understanding then you are at greater risk of not knowing a good programmer from a bad one. Even if you are a level 3 or higher the risk is still there, it is just lessened. As Dirty Harry said, "A man has got to know his limitations." Once you understand this you can then work better. If you don't understand software development then you have to apply your resources and common sense. What are some of the "common sense" things to do?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Allow someone else to make the hiring decision for you.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Find someone that is at level 3 or higher. Do you know anyone that has hired successfully in a software development situation? Go through a staffing agency. Use a head-hunter to find someone for you. Hire a consultant to gather the requirements for the task and from these requirements then you can create an accurate job description.&lt;br /&gt;&lt;br /&gt;Allowing someone else to make the decision is kind of like the chicken and the egg problem. In this situation it goes something like this. I do not really know what type of computer scientist I need to hire. I will consult with someone that does understand the job. How do I select this consultant? Since I do not understand the problem enough to do the task myself how will I know if the consultant I select really knows what they are doing? So now I need another person that understands how to choose a consultant. You eventually have to trust someone to do their job. Once again you can do some simple things when selecting a consultant. You can talk to their previous clients to ascertain their level of satisfaction.&lt;br /&gt;&lt;br /&gt;If you are at level three or higher then you may decide to do the hiring yourself. Many at this level will have trusted relationships with staffing agencies and head-hunters to do some of the initial work.&lt;br /&gt;&lt;br /&gt;Even level three's and up can review and improve their hiring process. Maverick development is about getting the job done. Traditional methods are not sacred. Methods that work for the task at hand are more important that organizational policies and former practices.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;During the hiring process you must:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Define the job requirements&lt;br /&gt;&lt;br /&gt;2) Define the employee arrangement (full-time, part-time, contract, on-site, off-site)&lt;br /&gt;&lt;br /&gt;3) Interview with the purpose of discovering skills and talent that is relevant and pertinent.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Specify the Job Requirements&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At level 3 the defining of the job requirements are at risk of being overly constrained in some areas while being to general in others. For example, the job requirements state that the candidate must have six years Java experience and three years database experience. Many times the language requirement is over constrained. As a senior computer scientist I know that the time it takes to switch from C# to Java is measured in a few days. The time it takes to go from Java to C++ is measured in weeks. So the real job description might say "Six years of object oriented development experience using abstract classes, interfaces, and virtual methods. Java knowledge is a plus." The requirement also says three years database experience. This is typically too general. Database setup and administration varies greatly. Is it an embedded solution? Are stored procedures necessary? Is it an SQL based solution?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Full-time, Part-time, or Contract&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When defining the hiring arrangement be accurate and honest. Too often games are played with peoples careers. If you need a contractor for only six months then hire a contractor. Don't hire a developer full-time with the intent of down-sizing the operation when the software is finished. Full-time "types" are not smarter than contractors. There are many of the best talented computer scientists that enjoy the freedom and diversity of contracting. Also, their experience in specifying the entire gamut of issues in software development may make them more valuable to the level 1 and 2 employers.&lt;br /&gt;&lt;br /&gt;Also, be accurate and honest by hiring a full-time employee when that is the desired goal. Hiring contractors or converting your full-time staff into contractors in order to re-arrange expense reporting maybe advantageous to a business in the short term it will not be so to your employee base in the near term. If you hire a contractor and treat them as a full-time salaried employee they will not be satisfied. They are hourly or task paid. They will not work 60 hours a week when they are hourly and you pay them for 40. It is not right to even ask them to do so. In the other situation where you take your full-time staff and convert them to contractors you can not expect them to be satisfied. Computer scientist that like full-time employment enjoy the opportunity to grow along career paths specified by the employer. Their benefits and salary are at a rate that justifies working without punching a clock. This means there will be long days and their maybe some short days, but on average every day is a busy day.&lt;br /&gt;&lt;br /&gt;When hiring a contractor remind yourself that this is not a hard goods manufacturing process but it is the development of software. There is no parts list or building plans unless you are at level 5. The low bidder will not necessarily be the cheapest path. Every software developer knows that once you have started a task it will cost an extreme amount of money to switch horses mid stream. Suppose you hire a software developer and they have spent one year writing code. You are frustrated because the software does not do what the software developer promised it would do by this time. If you fire the software developer it could take one quarter of the time already elapsed to come to an understanding of what is already developed and how to proceed. In this example that would mean three months of absolutely no progress to the end solution. What if you don't fire the original software developer? Maybe they are about finished. It comes down to a matter of trust. Is this developer in over their head? If you are level 3 or lower how would you know? Maybe they are dishonest and are simply wasting your time and money. Everyone knows in software development the ploy of the lowest bid. They know that the employer will be familiar with the costs associated with switching developers mid-project and that the employer will avoid this choice at nearly all cost. So the unscrupulous contractor will bid eight months knowing full well that their true estimate is one and a half years.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Interviewing with a Purpose&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Interviewing with a purpose is so fundamental you would think it wouldn't need to be stated. However, the way companies interview programmers vary so greatly I feel that a little refresher course is needed.&lt;br /&gt;Consider the Person&lt;br /&gt;&lt;br /&gt;The first thing you need to consider is the person. That is what you are hiring. The computer scientist is more than just a brain with hands that can type. Finding a person that fits the company culture is extremely important. Consider this analogy of buying a pure-bred show dog. Let's consider one of my favorite breeds the Australian Shepherd. You want a dog to win best in breed and in agility trials. You have a choice of a dog that does not meet the breed standard and is completely trained in the agility course and a dog that is near ideal to the breed standard but has not been trained in the agility course. These are your only two choices. Which dog do you buy? The dog that fits the standard because you can take the chance on training it in the agility course. The other dog can not change its looks. If you have a candidate for employment that is extremely talented but does not fit in or work well with others and you have a candidate that works well with others but lacks experience which do you hire? I would say the one that works well with others. If it is an out-sourced contract position this analogy will not be as pertinent.&lt;br /&gt;Consider the Skill Set&lt;br /&gt;&lt;br /&gt;After considering the person you must consider the skills and knowledge. This is where I feel many companies do not give due diligence in the hiring of computer scientists. What would be the ideal way to discover a developer's skills? Have them develop something. You know what task that you want them to do. Devise a thin thread of functionality, or some key part of the system, and have them implement it. Have a development machine setup. Have current books available. Online documentation. Access to the internet. Let them bring their laptop and any books they want. Give them the task to do and leave them to do it. No time constraints. They know to do it as fast as possible. If you have a coding standard, give them an easy 1/2 page abbreviated version of it to follow. Really test them. If there is some IDE or code tool that they prefer to use, allow them to install it, to go home and get it and reschedule for the next day. If you are going to pay this person a professional salary for years to come, what is the worth of the time to let them really show their stuff? Remember, good programmers are not necessarily good interviewers or good speakers or have developed social skills.&lt;br /&gt;&lt;br /&gt;The same goes for hiring an architect or designer as it does for a developer. Have them do something associated with the position to be filled. Have them design a system and talk about the deployment issues. Have them role play and you be the customer and let them try to discover requirements and use cases. Maverick development is about understanding what the end goal is of a method. If there are other ways of achieving the end goal then those methods can replace the current method. The end goal in interviewing is to discover the best candidate. Do what ever it takes to discover this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Have them Present their Results to the Team&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After you have narrowed the candidates down to the best of the best have them come in together for a different phase of interviewing. In this phase they will talk about the solution to the development problem you gave them earlier. Have each of them in front of the team and the other candidates present their solution and talk about it. Question them all and let any that want to answer speak up. If someone is quiet then single them out and ask them directly for their comments. Then have the interviewers and the interviewees rank everyone that interviewed. Yes, have them rank their competition. This will reveal a lot about each candidate.&lt;br /&gt;&lt;br /&gt;It comes to mind that there may be some issues with each candidate meeting with the other candidates and their discretion. What if two of the candidates are from the same company? What if one of the candidates is personal friends of the manager of another of the candidates. Once again it is a matter of trust and this trust is that these final candidates have and honor professional ethics. If you can't have the ideal situation with them all together then Maverick development says do the best you can. Use your imagination and talents and come up with an alternative approach that meets the goals of discovering a person's talents and skills. I cannot specify all of the possible scenarios that can occur in a paper or even a book. In the end it is up to you to be up to the task.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Preconceived Notions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Preconceived notions or implanted notions are extremely powerful. That is why they play such a significant role in philosophy and reason. If you have a particular notion about a candidate before you interview them it will be nigh impossible to not bias everything concerning the candidate through the affects of that notion.&lt;br /&gt;&lt;br /&gt;One example is poisoning the well. If an employee poisons the well for a candidate and this employee would be working with the candidate then you have to step back and think. Remember thinking on your feet is allowed in Maverick. Why would this person not want the candidate to be hired? Are there real professional reasons? Maybe there are. Maybe there are not. Maybe the person has another candidate that they want to be considered and do not realize that their personal agenda is overwhelming their actions. You have to deduce the answer to the old "what's in it for them" question if you do not hire this candidate. If the things that are in it for them are all business aligned then the comments are appropriate, whether they are accurate or not remains to be known. It seems philosophy here comes to play and the lessons in fallacies. Poisoning the well is one of many fallacies that reveal what I think is human nature to try to convince people that your opinion is correct at all cost including throwing out reason.&lt;br /&gt;&lt;br /&gt;Sweetening the water. I don't know if this term is reflects what I want to say. It is basically the opposite of poisoning the well. If a recruiter is sweetening the water and saying, "This is the best candidate for the job you will ever find" you have to ask yourself what is in it for the recruiter? Is their a conflict of interest here? The recruiter doesn't get paid unless you hire one of his candidates. It also implies that unless the recruiter gives this glowing testimonial about every candidate that he refers then those without the testimonial must be mediocre.&lt;br /&gt;&lt;br /&gt;Preconceived notions seem to be the core of a long used interviewing tactic I refer to as tricky questions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tricky Questions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tricky questions are built upon preconceived notions. I have heard it said about tricky questions, "I like to ask impossible questions. Stupid people will just stare at you." Really. Maybe this stupid person is saying to themselves, that is an impossible question and this interviewer has not shown me any reason not to believe they are an egocentric idiot. Only people that are having their first few interviews in life are surprised by all of the methods and tactics employers use to try to discover talent. If a seasoned professional looks at you like you are crazy for asking an impossible question then maybe you should ask, "Why do you feel this question is inappropriate?" Maybe the candidate is feeling that they have a tremendous set of skills and you haven't even begun to discover them. So, maybe you should ask, "Ok that question is difficult, and you seem impatient about using valuable interview/first impression time on that question. Is there something you would like to say to let me know concerning your skills and problem solving abilities?" There is little need for clever tactics or tricky approaches. Get to the point.&lt;br /&gt;&lt;br /&gt;Why do interviewers ask these tricky questions? To determine if you can think. I think it would be fair if the interviewee could ask the interviewer some tricky questions as well. The boss should be as smart as the employee. Isn't it amazing that you can lose a job opportunity because you don't know why man-hole covers are round! My point is the value of the question is not properly weighted. Maybe a better question would be something to do with the programming task at hand, like, "what are the trade-offs of shared memory versus a messaging system?"&lt;br /&gt;&lt;br /&gt;Also questions concerning development commodities are of little use. For example a question like, "How would you write a qsort" is not relevant when sorting is an IT commodity. You wouldn't write a qsort unless the one you where using didn't meet some criteria. Then, you would studying an algorithms book for a bit and decide what type of sort was needed, and then if it is a qsort then implement one by applying the collective knowledge of the algorithms text, the internet, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Compensation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After you have selected a candidate prepare to compensate them in a rewarding way. One of the many things the Boy Scouts of America teaches the volunteer leader is the value of rewards and the motivating effect it has on people. It would definitely add skills to every manager to volunteer as a Scout leader. Maverick development tries to emphasize the difference between management and leadership and the Scouting program is an example of this.&lt;br /&gt;&lt;br /&gt;Compensate the new hire well and use your head when doing so. Suppose you have 75K budgeted for the hire. Offer them 70K and a 5K bonus if they will stay on for at least a year. Or, maybe offer them a 3K bonus and then save the other 2K to give to them during the year as they mature into their position. Use your head. Make the most of the rewards. Start the new hire with 1/2 of the annual accrued PTO immediately available. Give them a pay-scale and range of titles and such so they know where they are and how the can strive for more. Actually tell them your expectation of when they should have achieved a promotion.&lt;br /&gt;&lt;br /&gt;In the review process don't tell them, "No one gets the 'Exceeds Expectation' status, it is only there to drive you." How will that drive a logical person? If "no-one" ever gets it then I will never get it. What you do say is that last year six people received the exceeds expectation status and here is what they did!&lt;br /&gt;&lt;br /&gt;Compensate them with knowledge and training. Let them have $500.00 budget for any books they want. Also, find conferences or user groups or something for them to attend every year. There are so many local area users groups that long distance travel may not be necessary. You don't have to "make them happy" you simply let them be happy. You say, "Why make them happy unless they deliver." If you say that then you have missed the point.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Firing an Employee&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And what goes with hiring that is never talked about? Firing. How do you select people from your software development department to be fired, laid off, or what ever term you want to use. (Isn't it amazing how people come up with substitute words to describe undesirable things?)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Three Steps to firing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Make sure the review process is fair and functioning. Maverick Development proposes that reviews are done by every person on the team and they review the others and their managers. The results are posted and are known company-wide. If a person receives a bad review then they have the right to pull all of the reviewers together and discuss the situation. Why? This does many things of which one is that the person doing the review is serious about their statements and another is that misconceptions can be faced openly and the opportunity for improvement is provided.&lt;br /&gt;&lt;br /&gt;2) Make sure you address the issues and concerns of the employees. I know a developer that was to be fired. My manager told me that since I was the team lead it was my responsibility to let him go. I said that he is a fine worker and I see no need to fire him. The manager said that this employee never got anything done. I asked the employee what he needed to finish his tasks. He said, "Two weeks left alone without interruptions." The manager said that he could have his two weeks, but that this was a probation period. I watched very carefully during the two weeks. The manager continually interrupted this employee. He gave him side tasks. The manager used him as a sounding board for varied topics (because the employee had a vast amount of experience in many areas). The employee lost on average two hours a day. At the end of the two weeks the employee wasn't finished. The manager said to me, "We have to let him go, we gave him what he asked for and he still did not deliver."&lt;br /&gt;&lt;br /&gt;Most of us know what we need to do our job. If you ask us what we need and then you don't give it to us then you might was well fire us because we are going to quit anyway. No one likes to be setup for failure. When you ask an employee what they need to get the job done then you can evaluate and say,"Ok, I can give you what you request, but this is critical and your job is on the line." Or you can say, "What you ask for is not normal or reasonable, I can get Joe Schmoe to do the same task without these additional resources. You are not the right person for this task. I am sorry." But be fair about this, if Joe Schmoe comes in and takes the task and then doesn't deliver you have to let Joe go as well. You can not allow someone to undercut someone else and then not deliver. It is never acceptable.&lt;br /&gt;&lt;br /&gt;3) Don't turn on the employee when you have to let them go. Games like, "If you sign this paper that you will not sue us then we will pay out your vacation." Well, I wasn't thinking about suing before, but now I am. Also, when you let someone go you can not expect to dictate to them where they can work. "Sorry we have to let you go. Remember you can not work for any of our competitors for three years." This engineer has worked and developed a very specific set of skills while in your employment. He is not going to have up to date skills in areas other than those that are business related. He has to be able to provide for himself and most likely a family as well. The intellectual property is all that you own. You can't let someone go and then tell them who they can or cannot work for.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Conclusions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Understand the job&lt;/span&gt; to be performed and &lt;span style="font-weight:bold;"&gt;hire the correct person&lt;/span&gt; for that job. &lt;span style="font-weight:bold;"&gt;Don't&lt;/span&gt; hire an architect when you need a junior programmer. &lt;span style="font-weight:bold;"&gt;Understand yourself and your ability&lt;/span&gt; to select software developers. If you do not understand software development then you are at risk of being duped by an employment candidate. Allow someone that does understand software development do the hiring.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Before &lt;/span&gt;you can interview you must &lt;span style="font-weight:bold;"&gt;define &lt;/span&gt;the job requirements, select the employment type (contract, full-time, etc), and devise an interview plan that will allow you to discover if a candidate is qualified.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;During &lt;/span&gt;the interview process allow them to &lt;span style="font-weight:bold;"&gt;perform tasks that are relevant&lt;/span&gt; to the job. Allow developers to write code on a computer using the tools of the trade. Allow architects to design something using the current methodologies. Have them perform a representative set of tasks aligned around the job requirements.&lt;br /&gt;&lt;br /&gt;Avoid tricky questions like "why man-hole covers are round". Why, because they are loaded with preconceived notions that all programmers that are good know why man-hole covers are round.&lt;br /&gt;&lt;br /&gt;Avoid questions concerning IT commodities such as sorting routines. Few developers write sorting routines anymore. If a developer is faced with this task they will definitely use reference materials to come up with a proper solution.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Understand rewards and compensation&lt;/span&gt; and how to use it to the company's advantage. If you have $75,000.00 budgeted for the new hire, set back $5000 of it to use for a bonus and make sure you give the bonus for some reason or another. Not giving the bonus is not an option. Use your compensation wisely.&lt;br /&gt;&lt;br /&gt;Use an open review policy that allows everyone to review the others in their group and their chain of management. Do not have impossible grades in the review process. If no one every gets the grade "Exceeds Expectations" then why would any logical person strive to earn that grade. Give examples of people that have earned the highest grade and what they did to earn it.&lt;br /&gt;&lt;br /&gt;When firing an employee it becomes clearer that the choice to fire is correct if the review process is in place and is working. When someone has to be fired do not treat the person as an enemy of the state. It is amazing how it is one big family when they hired you and now it is business when they fire you. Try to leave a positive impression on the person. Their morale is crushed. This may mean months of unemployment and struggle. Pay them their vacation without strings attached. Don't try to tell them who they can and cannot work for either. You have surely secured your intellectual property and that is sufficient.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-975045596879066816?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/975045596879066816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=975045596879066816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/975045596879066816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/975045596879066816'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/hiring-and-firing.html' title='Hiring and Firing'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-3332332652979274464</id><published>2008-01-21T21:15:00.000-08:00</published><updated>2008-01-29T08:09:57.153-08:00</updated><title type='text'>Maverick Review Process</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Abstract&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Maverick Review Process is a method in which&lt;span style="font-weight:bold;"&gt; each person reviews those that affect or are involved with their work&lt;/span&gt;. Also an individual evaluates each department of the company. &lt;span style="font-weight:bold;"&gt;There are no evaluation levels that are unattainable&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight:bold;"&gt;Maverick Review&lt;/span&gt; Process is &lt;span style="font-weight:bold;"&gt;not&lt;/span&gt; the &lt;span style="font-weight:bold;"&gt;same as 360 Degree Reviews&lt;/span&gt;; however, as with most review processes there will be similar aspects.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As with any Maverick approach one of the first things you should do is ask yourself, "What are the real goals of the review process?" Maverick Reviews identify the main goal of the process as being the improvement of the team. Another goal of the review process is to recognize an employee's performance.&lt;br /&gt;&lt;br /&gt;Maverick approaches include the idea that salaries are known throughout the company. If you do not adopt the "known" salary policy you can still use Maverick Reviews. In justification of the "known" salary policy consider it thusly; simply stated everyone should be proud of their salary and feel they are worth receiving it, if not then they should consider if there is fairness in their workplace.&lt;br /&gt;&lt;br /&gt;The Maverick Review process is different than 360 degree reviews. Granted there is no standard for 360 degree reviews, therefore one may exist essentially identical to the Maverick approach. Unlike the Maverick Review Process, 360 processes are typically managed and controlled by HR in a rigorous fashion. 360 reviews are setup and determined by management. Since the 360 review is complex and requires a significant amount of time to perform the process can not be continuously performed. 360 reviews are often driven by a questionnaire and thus being formal and specified can be fed into systems to create reports from the review process. After the score from the 360 review is determined the employee and the manager go over the report and the manager suggests actions, goals, and methods for improvement that I will call an action list. The employee has the opportunity to modify the action list and once agreed upon the action list is then kept so that it can be consulted as the employee is monitored by the manager. Usually in six months the review process is repeated.&lt;br /&gt;&lt;br /&gt;In the 360 review process the most difficult task of management is to compile and analyze the data. This is probably true with most review processes. Management has the burden of interpreting the data and making the best business decisions possible. It is estimated that it takes 20 hours of work to analyze and synthesize the data of each reviewed employee. That is why it is suggested that management sets up the review schedule, because it is expensive.&lt;br /&gt;&lt;br /&gt;In the 360 process everything is kept confidential. It is assumed that if the reports are not confidential then people will not give honest reviews of other people. Also, a 360 review is not a performance evaluation. It is concerned with how you are perceived by others and how to better work with the team. It is termed a developmental approach instead of an appraisal approach.&lt;br /&gt;&lt;br /&gt;The setup of a 360 review has many essential elements to any review process. First you set up the review categories to be aligned with business goals and objectives. In subsequent reviews the categories are built upon the previous review elements and thus the review process is evolutionary.&lt;br /&gt;&lt;br /&gt;Finally in 360 processes it is recommended to use software to perform the review and generate the review reports. Since the 360 process is not a performance review and is very costly to perform they are not done continuously or as regular as a performance review. As you improve your 360 process you will increase the throughput of the process.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Maverick Reviews&lt;/span&gt; are &lt;span style="font-weight:bold;"&gt;concerned&lt;/span&gt; with the &lt;span style="font-weight:bold;"&gt;productivity&lt;/span&gt; of a group or workers and the individuals that make up such a group. 360 reviews is a general approach that has a wide application. Therefore the Maverick Review process is considered what is known in the industry as a customized instrument for software development organizations.&lt;br /&gt;&lt;br /&gt;Maverick Reviews are a type of &lt;span style="font-weight:bold;"&gt;mulit-rater feedback&lt;/span&gt;. Because multi-rater feedback systems can be manipulated it is essential that you have the right people. This is a chicken and egg problem. To find out if you have the right people you need to perform a thorough review. To do a thorough review you must have the right people. If you want to apply a 360 process or Maverick Reviews to an existing team then be very careful. You could easily create a severe problem. Just as you can not dump democracy on a communist state you can not dump Maverick Reviews on a traditional company. However, gaining the benefits of the Maverick Review process make it worth considering how you can introduce Maverick Reviews into your workplace.&lt;br /&gt;&lt;br /&gt;Maverick Reviews do not require an HR department to manage and administer the reviews. This eliminates the expense of traditional 360 processes. The reviews are simple enough to be performed regularly. The 20 hours of analysis per review of a 360 process is eliminated. There is no specialized software for tracking the review process. The process is simple and to the point.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Goal of Maverick Reviews&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To improve the employees on an individual, team, and company level.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;How Its Done&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Each person on the team reviews everyone else on the team, them self, and their management. The review ranking can be one of the following: great job, good job, or poor job. Great job and good job rankings may merit some type of reward. Poor job will mean that the reasons for the rating will be specified and discussed. Realize, a poor job rating will be taken personal because it is personal. Also, a great job rating is personal and when a person receives a great job ranking he/she is glowing and smiling and people congratulate him/her and all that is personal as well. All ratings are personal. Just remember that and work with it. A poor job rating has a concise list of the issues that caused the poor job rating. If a person gets two poor job ratings then they will lose their position on that team and will have to find a new position within the company or in another company.&lt;br /&gt;&lt;br /&gt;Teams also rank other teams that have an effect on them directly. If there is a company wide bonus and it is based on product delivery and sales then the development team is responsible to deliver and the sales team is responsible to make the sale. In-depth knowledge of the day to day work of external teams will not be sufficient to allow rankings of individuals. Therefore a team ranking will be performed based on public knowledge of published team performance.&lt;br /&gt;&lt;br /&gt;An example may help.&lt;br /&gt;&lt;br /&gt;Suppose a team of five software engineers, a software engineer team lead, two software testers, a project manager, a product manager, and a department director. Each person reviews every other person. The reviews are taken and tallied. Suppose that the product manager and one of the software engineers receive a poor job rating, one software engineer and one software tester received a great job rating, and the rest received a good job rating. When the ratings results are posted the two that received the poor ratings are visibly concerned. Their faces become reddened and they scowl at a certain team member as if to say, "I knew you didn't like me." Let's suppose that the product manager actually breaks down in tears and leaves the room.&lt;br /&gt;&lt;br /&gt;Now there are several things that must be done. One is the consideration of natural human feelings. Another is the specifying of the reasons for the poor job rating. Also it must be determined if there is a coalition or some kind of attempt to control the outcome.&lt;br /&gt;&lt;br /&gt;First there must be some time for emotions to settle. When this has happened bring the review group back together. I would suggest that the review results are presented in the morning and the discussion of the review commences after lunch. Now comes the open discussion of the reasons why the ratings were given. All of the ratings must be reviewed and not just the poor ratings.&lt;br /&gt;&lt;br /&gt;Let's suppose that when reviewing the reasons for the poor rating for the software engineer there isn't a clear issue. The engineer had given them self the rank of good. It was the other engineers on his team and the team lead that had given the poor job rating. The reason they give is that the engineer doesn't work well with the team. The engineer doesn't make his code fit within the architecture that the team has adopted. The engineer does deliver the projects and product features on time and with high quality. For this reason the other reviewers gave the good rating. However the other reviewers do not understand the ramifications of not working within the architecture as does the engineers and the team lead.&lt;br /&gt;&lt;br /&gt;Now the review of the product manager is considered. The poor rating comes from four of the software engineers and the two software testers. It is stated that the reason is the product manager continually changes features and their priority. The product manager had given them self the rating of great job. The reason the product manager says is that the customer is extremely happy with his responsiveness in adding and prioritizing the features for the product.&lt;br /&gt;&lt;br /&gt;Now the other ratings are reviewed. It is discovered that there may be some block voting amongst the engineers in that four of them ranked them self great and had ranked each other as great. This is suspicious because it is typical that truly great people under-rate them self. It is also typical for people below average to continually rank them self higher than their true rank.&lt;br /&gt;&lt;br /&gt;Also the team ranks other teams that affect them in some way. In this case they rank the sales team and the executive committee.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What You Do With The Results&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now is the time for edifying. Edify is a great word. While living in Spain and learning Spanish it soon became apparent that the word edify is about building. So, it is time to build the team. It is time to build the team members. Why do a review process if improvements are not expected?&lt;br /&gt;&lt;br /&gt;The engineer needs to understand the architecture better. In this mocked example it is discovered that the engineer didn't use the architecture because the team didn't take the time to teach the architecture. This engineer was the last one hired and had been left out because of the urgencies and other factors that detoured the necessary training for the new hire. Since the engineer is very talented he was able to deliver his features independently. Now that the reasons are understood the person is re-rated. Considering the actual work environment the engineer had performed a good job and everyone agrees to change the rating.&lt;br /&gt;&lt;br /&gt;The product manager needs to understand the effect of changing priorities and features. In this mock example it is discovered that the customer really wants the changes that the product manager keeps requesting. The customer is very happy with the project manager's effort but disappointed that the company doesn't seem to care. Everyone comes together and they realize the project manager needs to revamp the development process to be more agile. Once again the team rates the product manager and gives a rating of good.&lt;br /&gt;&lt;br /&gt;Finally everyone is looking at the four engineers that ranked themselves as great. They realize immediately that they had not been great because they had let down the new hire by not training them properly on the architecture. Also they realize that the were not great because they had been complaining about the flip-flopping product manager and had not kept themselves current in new development processes in which they would have recognized that a change in process was needed. They re-rate themselves to a poor rating of which the group overturns and gives an overall good rating.&lt;br /&gt;&lt;br /&gt;The results are used to improve the team. This means that you have intelligent, thoughtful, and considerate team members. Injecting this process into a team that is known for its good old boy networks, heroes, and empires will cause disruption. How do you know if you have a team that will not work well with Maverick Reviews? First, open your eyes and your ears. What do you hear? Do you hear things like, "Don't ever invite so-and-so to a meeting, they drag them out forever over fringe concerns that are not valid" or "I had to work 80 hours a week for the past two months to save this company because no one around here knows how to do anything" or "We need to start an elite team of developers to engineer the next generation product and here is the list of people that qualify." Those are some of the things you may hear. But what about things you may see? Are there certain teams that get all of the perks, all of the ten cent options, or the lion's share of the bonus pool? Are there certain groups that walk on water, than can not be frustrated or disturbed, or that are declared hands-off?&lt;br /&gt;&lt;br /&gt;In Maverick Reviews there are no ranks that are used as an enticement. There is no exceeds expectations rank that no one can attain and is continually dangled as a carrot.&lt;br /&gt;&lt;br /&gt;The results of the review do not need to be archived or maintained in a database. Any "dirty laundry" from the review stays with those that participated in the review. Talking about someone's performance to other teams and individuals will result in the "informer" getting a poor rating once they are discovered.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;How Often Do You Have Reviews?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will depend on the software development methodology that is being used. The goal would be to review the team members after the team members have met some kind of milestone. In an XP world this could be at the end of each release. In a Waterfall world this could be at the end of the development phase for each feature, component, or whatever your choice is for dividing up the work.&lt;br /&gt;&lt;br /&gt;Since the team members perform the review you do not need to schedule HR or any resources other than the team itself. Maverick reviews also include the review of other teams as well as your own. Those reviews would be done when a larger corporate milestone is met such as the completion of a business quarter. Remember, this is a Maverick approach so do the review when it makes sense. When does it makes sense to do one? Probably when there is some data available such as the quarterly numbers, the results of the end of release reflection, or any other event that your company deems important.&lt;br /&gt;&lt;br /&gt;A little story to help in deciding how often to review. My example is a basketball game. The scenario is this, there is one 0.2 seconds on the clock, your team is down by one point, and you are at the foul line. You miss both foul shots and the othe team in-bounds the ball and the clock expires. You lose. Everyone looks at you because you lost the game. I call this the last shot at the end of game syndrome. No one seems to remember that in the first half of the game that the Center missed two easy dunks and had the ball stripped from his hands four times.&lt;br /&gt;&lt;br /&gt;I hope you get the point of my story. If your company does reviews on a six month or once a year basis then you need to make sure you don't goof anything up in the last few weeks before the review. All of your other activities during the year will be discounted due to human nature.&lt;br /&gt;&lt;br /&gt;Review often so that the results are timely with the current state of the company.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;OK, Now I Have To Fire Someone&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As a guideline the participants of the process that hires someone are the participants in the process that fires someone. When hiring a member of a software development team the entire team participates in the hiring process. Thus the entire team participates in the firing process. When hiring a manager the participants are typically the ones that make up the reporting chain. When firing a manager the participants of the reporting chain will consider the reviews given by each team that works with the particular manager.&lt;br /&gt;&lt;br /&gt;Suppose that someone has two successive poor ratings. The person must find a new position. You can feel confident that the review process is accurate. In Maverick Reviews and other multi-rater review process you will have fewer problems with correct ranking. The burden doesn't rest on someone that may be removed from the real work. The burden doesn't rest on one individual. The, what have I done for you lately, the last shot of the game syndrome, the horns and halo description is eliminated or at least greatly reduced.&lt;br /&gt;&lt;br /&gt;In Maverick, if someone is "fired" from their team they can apply for any open position within the company. Just because a person doesn't perform well in one circumstance doesn't mean that they will not excel in another. Realistically it would be difficult for the person to find a position unless the team they left has a bad reputation of treating its members unfairly.&lt;br /&gt;Whistle Blowing and Anonymous Complaints&lt;br /&gt;&lt;br /&gt;There are other ways to learn information about a team or individual. Sometimes there is a whistle blower that can bring attention to a problem that needs addressing. Sometimes there are simple complaints that are made. These are all tidbits of information that should be taken serious. Listen, watch, and learn. That is the key. Don't delegate the responsibility of knowing your team and your company to the bean counters or soul-less reports, charts, and dash boards. Use their information but don't depend on it solely.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Maverick Reviews are a customized instrument for a multi-rated or 360 degree review process.&lt;br /&gt;&lt;br /&gt;Make sure you have a team that is concerned about the welfare of each other before you introduce the review process.&lt;br /&gt;&lt;br /&gt;A fundamental piece of information to make the review process work is that of everyone's salary is known. This does not cause civil war unless salaries are unfair. Unreasonable people will be removed through the review process.&lt;br /&gt;&lt;br /&gt;The goal of the review process is to improve individuals, teams, and companies. Maverick teams are teams that are made of individuals that want to do a good job. It is the people that make the difference.&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;&lt;br /&gt;The Great Debates About 360 Degree Feedback&lt;br /&gt;360 Degree Feedback: The Good, the Bad, and the Ugly&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-3332332652979274464?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/3332332652979274464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=3332332652979274464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/3332332652979274464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/3332332652979274464'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/maverick-review-process.html' title='Maverick Review Process'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-4824746383053735631</id><published>2008-01-21T21:14:00.000-08:00</published><updated>2008-01-29T08:12:59.961-08:00</updated><title type='text'>Corporate Communication</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How do you communicate concerns and ideas for improvement? How does the work environment and corporate culture facilitate freely sharing ideas or concerns? The answer to these two questions should be on the lips of every employee, from the CEO and down. As a challenge to your company I suggest you create a questionaire that would reveal if your employees know the answers to these two questions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Problem Recognition&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Some people have a knack at recognizing existing problems or predicting future problems. Their ability usually is enforced by experience that they have in the area. Many of us can identify a problem with our automobile and even be very precise about the problem but lack the ability to fix the problem or even suggest a possibly remedy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Problem Resolution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When a problem has been recognized a resolution must be discovered. The resolution may be that you avoid the problem altogether or the resolution may be that something is changed. I don't think ignoring a problem should be considered as a type of resolution.&lt;br /&gt;&lt;br /&gt;For example suppose that you manage a race car team and that every May at Daytona your car's air intake gets clogged with insects. You could alter the situation so that the problem can not surface by not racing your car during the month of May at Daytona. Or you could solve the problem by replacing your current air intake with one that is modified so that insects can not clog it. Ignoring the problem would not win any races.&lt;br /&gt;&lt;br /&gt;The resolution of a problem requires an understanding far greater than that of recognition. Expertise and experience in the field in which the problem exists is required.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Communication of Concerns and Ideas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first question introduced is how do you communicate concerns and ideas for improvement. The "how" suggests what medium is used. But let's get to that in a moment. The first things are what are you going to communicate and to whom.&lt;br /&gt;&lt;br /&gt;First make sure what you are communicating as a problem really is a problem. If the things you perceive as problems are not really problems then people will not treat your communications with urgency. Problems have severity and the level of severity needs to be estimated. A problem with a computer game may be an annoyance but a problem with a heart monitor could be fatal.&lt;br /&gt;&lt;br /&gt;Next you need to decide to whom to communicate the problem. If the severity of the problem is low enough then telling your immediate manager might suffice. If the problem is sufficiently severe then you should tell you manager and his manager at the same time. Notice that there is no end-run-around.&lt;br /&gt;&lt;br /&gt;Finally how do you communicate a problem? The severity also should come into consideration. If the problem is severe or complicated then a letter, email, or some traceable medium should be used in conjunction with a face-to-face meeting. Traceability or paper-trails are useful in documenting the situation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Collaborative Corporate Culture&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The second question introduced by this paper is how does the work environment and corporate culture facilitate freely sharing ideas or concerns. The answer to this question is complex and requires the right culture and environment. The Maverick principles in hiring play a role in this as well as the Maverick principle that all salaries are company knowledge. Also, the Maverick principles concerned with the review process are part of the culture necessary for an open and collaborative environment.&lt;br /&gt;&lt;br /&gt;If you have a culture where politics is a problem and people are defensive and distrustful then you will never have efficient communication. Too many factors will come into play that will bias the recognition, resolution, or communication of any problem. Manipulation will become part of every conversation. Coup d'etats and end-run-arounds will be the methods used. Each resolution will be preceded with "poisoning the well" against any other resolution that another may present. I dare say, if you think you are experiencing these behaviors then your probably have a serious situation.&lt;br /&gt;&lt;br /&gt;To create the right culture the top of the company must open up and share the information and must demonstrate trust with the employees. One way to do this is to have company wide knowledge of all salaries. Think about it this way, if the knowledge of a salary would upset the workforce in such a way that production would drop then the question is what is wrong with the salary and the question is not what is wrong with the employees.&lt;br /&gt;&lt;br /&gt;In the Maverick hiring process people are selected that work well in a collaborative environment. During the hiring process all of the candidates are brought together to present their solution to a problem that was presented to them in advance. Each candidate presents their solution and comments on the solutions from the other candidates. Most everything you need to know concerning a persons knowledge, presentation skills, ability to take criticism, ability to give criticism, and ability to work with others will be manifested. Through this process you will hire people that know how to communicate.&lt;br /&gt;&lt;br /&gt;Through the Maverick review process people that are too political, that are empire builders, or that are heroes will be identified early and they will not be rewarded for such behavior. Those guilty of such offenses will either change or be fired in very short order. By removing these types of people others can communicate freely without the fear that someone will try to use some means against them.&lt;br /&gt;&lt;br /&gt;Also the Maverick principle of the emergent work methodology can be seen as the results of a collaborative corporate culture. If the teams organize and re-organize themselves and their way to do the job in ways that are more efficient then you have succeeded!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Some people are good at recognizing problems and others are good at resolving problems. The communication of problems is essential for a company to be successful. If your company suffers from coup d'etats and end-run-arounds then you probably have a severe problem. Through the sharing of salaries, the hiring process, and the review process a culture will come about that gives way to collaboration naturally and without the need of managing it into existence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-4824746383053735631?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/4824746383053735631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=4824746383053735631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/4824746383053735631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/4824746383053735631'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/corporate-communication.html' title='Corporate Communication'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-8370495517261872120</id><published>2008-01-21T21:13:00.002-08:00</published><updated>2008-01-29T08:17:09.301-08:00</updated><title type='text'>Maverick Common Sense</title><content type='html'>Maverick Common Sense&lt;br /&gt;by Geoffrey Slinker (This is an experiment where I have applied the language of Thomas Paine's writings entitled "Common Sense" to the area of business organization, management, and government.)&lt;br /&gt;&lt;br /&gt;December 2006&lt;br /&gt;&lt;br /&gt;Introduction&lt;br /&gt;&lt;br /&gt;Maybe the thoughts contained in the following lines aren't generally excepted or understood enough to gain general approval. It seems to be human nature that if over a long period of time something isn't challenged as being wrong or inefficient then the thing is accepted as being right or optimal. Any challenge to the long standing "thing" is usually at first met with resistance, but soon the commotion settles down and reason prevails.&lt;br /&gt;&lt;br /&gt;Long experience and empirical evidence of inefficiencies, failures, and abuses is sufficient reason to question the correctness of business management organization and process. These problems have caused people at all levels in business to question the generally accepted "ways" of managing and organizing a business.&lt;br /&gt;&lt;br /&gt;In this paper, I have avoided singling out any one management model as being good or bad, or any business leader as being good or bad. Those that have championed change do not depend on the success of my ranting. Also, in this paper, the arguments of those who prefer the status quo will ultimately be forgotten if there is not too much consideration given to their defensive remarks.&lt;br /&gt;&lt;br /&gt;The cause of the Worker is, in a great measure, the cause of all people. Many circumstances have, and will arise, which are not specific to a business sector or management style, but are universal, and through which the principles of all those that desire the satisfaction of a "good days work" are affected, and because they are affect by these universal circumstances they are also rightly concerned. The using of employees in such a manner that they are nothing more than a resource, like so much cattle, which destroys self worth and self esteem and ultimately works against a business' need for efficiency and profitability is the concern of every employer and employee that has the capacity of reason.&lt;br /&gt;The Origin and Design of Popular Business Organization and Process.&lt;br /&gt;&lt;br /&gt;SOME writers have so confounded the concept of Team with the management organization, as to leave little or no distinction between them. They are not only different but have different origins. A Team is the organizational results of real need. Management organization is an attempt to deal with our weaknesses and pride. A Team promotes the happiness of each member by uniting on goals and needs where management organization is to minimize the negative affects of human vices. Teams encourage working together with a common cause while management organization creates distinctions, distinctions that have no correspondence with business efficiency or profitability. Team-ship is a patron. Management organization is a punisher.&lt;br /&gt;&lt;br /&gt;Team-ship, community-ship, sociocracy, or whatever the term, is a blessing, but the common management organization of business in its best state is but a necessary evil in its worst state an intolerable one; for when we suffer, or are exposed to the same miseries by a business organization, which we might expect in a business with no organization or chaos, our calamities is heightened by reflecting that we furnished the means by which we suffer. High ceremony business organization, like government, is the badge of lost innocence; the mansions and estates of CEOs are built on the ruins of the humble home with the white picket fence and have redefined the organization of the family unit. If the intrinsic desires of a clear conscience were obeyed then there would be no need for another set of guidance. Since that is not the case, it is necessary to surrender up a part of the business earnings to furnish a means for the protection of the rest; and this is induced by the same prudence which in every other case advises one to choose the lesser of two evils. Wherefore, security and predictability being the true design and end of business organization, it unanswerably follows that whatever form thereof appears most likely to ensure it to us, with the least expense and greatest benefit, is preferable to all others.&lt;br /&gt;&lt;br /&gt;In order to gain a clear and just idea of the design and end of a business organization, let us suppose a small number of persons start a new company, unconnected to existing companies. In this state of natural liberty, team work will be their first thought. A thousand motives will excite them thereto, the strength of one man is so unequal to his wants, and his mind so unfitted for perpetual solitude, that he is soon obliged to seek assistance and relief of another, who in his turn requires the same. Four or five united would be able to found a fledgling company, but one man might labor out the common period of a life without accomplishing any thing; when he had envisioned the business opportunity he could not bring it to market in a timely manner; the continuous burn of capital would drive him to more short term ventures, and every different want call him a different way.&lt;br /&gt;&lt;br /&gt;Thus necessity, like a gravitating and organizing power, would soon form our newly found company into a team or society, the reciprocal blessing of which, would supersede, and render the obligations of corporate government unnecessary while they remained perfectly just to each other; but as nothing but heaven is impregnable to vice, it will unavoidably happen, that in proportion as they surmount the first difficulties of team work, which bound them together in a common cause, they will begin to relax in their duty and attachment to each other; and this remissness, will point out the necessity, of establishing some form of organization to supply the defect of moral virtue.&lt;br /&gt;&lt;br /&gt;Some convenient empty office will afford them a conference room in which every employee of the company may assemble to deliberate on company matters. It is more than probable that their first by-laws will have the title of "company guidelines", and be enforced by no other penalty than company-wide disesteem. In the first company organization every man, by natural right will have a seat.&lt;br /&gt;&lt;br /&gt;But as company portfolio and employment increases, the company concerns will increase likewise, and the distance at which the members may be separated, will render it too inconvenient for all of them to meet on every occasion as at first, when their number was small, their offices near, and the company concerns few and trifling. This will point out the convenience of their consenting to leave the business management part to be managed by a select number of chosen from the whole body, who are supposed to have the same business concerns at stake which those have who appointed them, and who will act in the same manner as the whole body would act were they present. If the company continues to grow, it will become necessary to augment the number of representatives, and that the interest of every part of the company may be attended to, it will be found best to divide the whole into convenient parts, each part sending its proper number; and that the elected might never form to themselves an interest separate from the electors, prudence will point out the propriety of having elections often; because as the elected might by that means return and work again with the general divisions of the company in a few months, their fidelity to the company division will be secured by the prudent reflection of not making themselves a permanent authority. And as this frequent interchange will establish a common interest with every part of the company, they will mutually and naturally support each other, and on this (not on the unmeaning title of CEO/President) depends the strength of the company, and the happiness of the employee.&lt;br /&gt;&lt;br /&gt;Here then is the origin and rise of business organization; namely, a mode rendered necessary by the inability of moral virtue to govern the company; here too is the design and end of business organization, that is to say., predictability and security. And however our eyes may be dazzled with snow, or our ears deceived by sound; however prejudice may warp our wills, or interest darken our understanding, the simple voice of nature and of reason will say, it is right.&lt;br /&gt;&lt;br /&gt;I draw my idea of the form of business organization from a principle in nature, which no art can overturn, that is to say., that the more simple any thing is, the less liable it is to be disordered, and the easier repaired when disordered; and with this maxim in view, I offer a few remarks on the so much boasted high ceremony organization of most businesses. That it was noble for the dark and slavish times in which it was erected is granted. When the world was overrun with tyranny, child labor, etc., the least therefrom was a glorious rescue. But that it is imperfect, subject to convulsions, and incapable of producing what it seems to promise, is easily demonstrated.&lt;br /&gt;&lt;br /&gt;Absolute leadership through a single office (though the disgrace of human nature) has this advantage with their kind, that they are simple; if the company suffers, they know the head from which their suffering springs, know likewise the remedy, and are not bewildered by a variety of causes and cures. But the corporate politics of high ceremony business organization is so exceedingly complex, that the company may suffer for years together without being able to discover in which part the fault lies, some will say in one and some in another, and every new management fad will advise a different course of action for remedy.&lt;br /&gt;&lt;br /&gt;I know it is difficult to get over local or long standing prejudices, yet if we will suffer ourselves to examine the component parts of high ceremony business, we shall find them to be the base remains of two ancient tyrannies, compounded with some new republican materials.&lt;br /&gt;&lt;br /&gt;First.- The remains of monarchical tyranny in the office of the CEO and other Chief positions&lt;br /&gt;&lt;br /&gt;Secondly.- The remains of aristocratical tyranny in the offices of the Executive committees, such as Vice Presidents and Directors.&lt;br /&gt;&lt;br /&gt;Thirdly.- The new republican materials, in the persons of the committees, offices, and middle management.&lt;br /&gt;&lt;br /&gt;The two first, by being appointed by the Board of Directors or the CEO, are independent of the employees and their business duties; wherefore in a constitutional sense they contribute nothing towards the representation of the needs of the divisions of the company.&lt;br /&gt;&lt;br /&gt;To say that the organization of the company is a union of three powers reciprocally checking each other, is farcical, either the words have no meaning, or they are flat contradictions.&lt;br /&gt;&lt;br /&gt;To say that the Board of Directors es a check upon the CEO, presupposes two things.&lt;br /&gt;&lt;br /&gt;First.- That the CEO is not to be trusted without being looked after, or in other words, that a thirst for absolute power is the natural disease of autocracy.&lt;br /&gt;&lt;br /&gt;Secondly.- That the Board, by being appointed for that purpose, are either wiser or more worthy of confidence than the CEO.&lt;br /&gt;&lt;br /&gt;But as the same business organization which gives the Board a power to check the CEO by withholding the supplies, gives afterwards the CEO a power to check the lower managers and committees, by empowering him to reject their other bills; it again supposes that the CEO is wiser than those whom it has already supposed to be wiser than him. A mere absurdity!&lt;br /&gt;&lt;br /&gt;There is something exceedingly ridiculous in the composition of high ceremony business organization; it first excludes a man from the means of information, yet empowers him to act in cases where the highest judgment is required. The state of a CEO shuts him from the world, yet the business of a CEO requires him to know it thoroughly; wherefore the different parts, unnaturally opposing and destroying each other, prove the whole character to be absurd and useless.&lt;br /&gt;&lt;br /&gt;Some writers have explained high ceremony business thus; the CEO, say they, is one, the employee another; the Executive committee are an house in behalf of the CEO; the middle managers in behalf of the people; but this hath all the distinctions of an house divided against itself; and though the expressions be pleasantly arranged, yet when examined they appear idle and ambiguous; and it will always happen, that the nicest construction that words are capable of, when applied to the description of something which either cannot exist, or is too incomprehensible to be within the compass of description, will be words of sound only, and though they may amuse the ear, they cannot inform the mind, for this explanation includes a previous question, that is to say. How came the CEO by a power which the company is afraid to trust, and always obliged to check? Such a power could not be the gift of wise people, neither can any power, which needs checking, be from God; yet the provision, which high ceremony business makes, supposes such a power to exist.&lt;br /&gt;&lt;br /&gt;But the provision is unequal to the task; the means either cannot or will not accomplish the end, and the whole affair is an act of suicide; for as the greater weight will always carry up the less, and as all the wheels of a machine are put in motion by one, it only remains to know which office in the company has the most weight, for that will govern; and though the others, or a part of them, may clog, or, as the phrase is, check the rapidity of its motion, yet so long as they cannot stop it, their endeavors will be ineffectual; the first moving power will at last have its way, and what it wants in speed is supplied by time.&lt;br /&gt;&lt;br /&gt;That the CEO is this overbearing part in high ceremony business organization needs not be mentioned, and that it derives its whole consequence merely from being the giver of places, positions, and pensions is self evident, wherefore, though we have been wise enough to shut and lock a door against absolute power, we at the same time have been foolish enough to put the CEO in possession of the key.&lt;br /&gt;&lt;br /&gt;The prejudice of business men, in favor of their own corporate government by CEO, Board of Directors, and Executive committees, arises as much or more from personal pride and self serving ambition than reason. Individuals are undoubtedly safer and treated more fairly than in the Industrial revolution, but the will of the CEO is as much the law of the land in Toyota as in Ford.&lt;br /&gt;&lt;br /&gt;An inquiry into the organizational errors in high ceremony form of corporate government is at this time highly necessary; for as we are never in a proper condition of doing justice to our work, while we continue under the influence of some leading partiality, so neither are we capable of doing it to ourselves while we remain fettered by any obstinate prejudice. And as a man, who is attached to a prostitute, is unfitted to choose or judge of a wife, so any prepossession in favor of a rotten high ceremony form of corporate government will disable us from discerning a good one.&lt;br /&gt;&lt;br /&gt;Thank you Thomas Paine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-8370495517261872120?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/8370495517261872120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=8370495517261872120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/8370495517261872120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/8370495517261872120'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/maverick-common-sense.html' title='Maverick Common Sense'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-3086780487879436199</id><published>2008-01-21T21:13:00.001-08:00</published><updated>2008-01-21T21:13:38.702-08:00</updated><title type='text'>Quotes and Maverickisms</title><content type='html'>"Hey, I knew that methodology when it was still just a complaint."&lt;br /&gt;&lt;br /&gt;"Experience trumps formal estimation."&lt;br /&gt;&lt;br /&gt;"Smells like chicken!"&lt;br /&gt;&lt;br /&gt;"We do not model for the sake of modeling; we model so that an implementation can be made."&lt;br /&gt;&lt;br /&gt;"Fundamentally most software development methodologies strive to improve communication and shorten the time of gaining experience."&lt;br /&gt;&lt;br /&gt;"Experience is better than iterations."&lt;br /&gt;&lt;br /&gt;"If you know what to do then why don't you do it?"&lt;br /&gt;&lt;br /&gt;"Revolution is for visionaries. Evolution is for apes."&lt;br /&gt;&lt;br /&gt;"You know with a flat-head screw driver, a pair of vice-grips, and a hammer you can fix almost anything but you can build almost nothing!"&lt;br /&gt;&lt;br /&gt;"Definition of Shared Code: Code that someone else wrote that you don't trust."&lt;br /&gt;&lt;br /&gt;"Don't tell me it is my problem and how you want it fixed. If it is my problem I will fix it the way I want."&lt;br /&gt;&lt;br /&gt;"A sheep herder is a sheep manager. A shepherd is a sheep leader."&lt;br /&gt;&lt;br /&gt;"Some people demand to be heard, some beg to be heard, and some are blessed to be heard." (Some are lucky to be heard!)&lt;br /&gt;&lt;br /&gt;"Frustration is the mother of invention."&lt;br /&gt;&lt;br /&gt;"Unless you take great risks how will I be able to rip you off?"&lt;br /&gt;&lt;br /&gt;"Servers: What comes up must come down."&lt;br /&gt;&lt;br /&gt;"Would you like some syrup with that waffle?"&lt;br /&gt;&lt;br /&gt;"Oh yeah, I know what to do, code faster!"&lt;br /&gt;&lt;br /&gt;"Of course I am lying, I can really do that in a week instead of three. Gosh, you caught me."&lt;br /&gt;&lt;br /&gt;Manager : "If programmers produce code what do you think managers produce?" Programmer: "Hirudin?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-3086780487879436199?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/3086780487879436199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=3086780487879436199' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/3086780487879436199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/3086780487879436199'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/quotes-and-maverickisms.html' title='Quotes and Maverickisms'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-4340241690185841392</id><published>2008-01-21T19:28:00.000-08:00</published><updated>2008-01-21T19:53:45.055-08:00</updated><title type='text'>The Final Review of Maverick Software Development</title><content type='html'>I just deleted the Maverick Software Development group. I had ran it for three or more years. It had nearly 150 members. I posted many thoughts and ideas on how I felt a software company should be ran.&lt;br /&gt;&lt;br /&gt;I captured some of the posts and put them in this blog.&lt;br /&gt;&lt;br /&gt;I did a lot of work on that group trying to change some ideas on how business can be ran and how software can be developed. When I reflect back on the effort I can not see that I effected any change. It seemed that everyone fell into two camps. Those that already believed in the ideas and those that felt the ideas where not practical. So I feel that I have caused no change and thus done no work.&lt;br /&gt;&lt;br /&gt;Is part of the problem that I did this for free? Maybe if I had written a book and charged for it things would have been received better. Maybe if I had went around as a consultant or something. I don't know.&lt;br /&gt;&lt;br /&gt;The current "players" in the software process space never seemed to get on board with any of my ideas. Either they they would say nothing or would say, "Oh, what you have proposed is something we did years ago and we called it XYZ-ABC-123".&lt;br /&gt;&lt;br /&gt;When I started the Maverick group it was because I had gained renewed hope for improvements when XP and Agile came on the scene.&lt;br /&gt;&lt;br /&gt;I had originally proposed Semco style changes years before Agile. Those "Maverick" ideas were rejected and my professional reputation had suffered because of my public alignment with those ideas. So I focused on programming, design, object oriented modeling, and other related fields and kept my head down.&lt;br /&gt;&lt;br /&gt;Well, I have came full circle once again. The evangelizing of the Maverick ideas seems to have done me no good and probably harm. So, I go back to what pays the bills and I leave the problems of process and improvement to those that have the book deals, the conference appearances, and the consulting companies. Clearly their financial success in their respective areas indicates that they are truly the most knowledgeable in the field of software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-4340241690185841392?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/4340241690185841392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=4340241690185841392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/4340241690185841392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/4340241690185841392'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/final-review-of-maverick-software.html' title='The Final Review of Maverick Software Development'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-8890494207009884605</id><published>2008-01-21T18:57:00.001-08:00</published><updated>2008-01-21T20:04:59.350-08:00</updated><title type='text'>The Maverick Carta</title><content type='html'>The Maverick Carta&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;We &lt;/span&gt;recognize that results reflect leadership.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;We &lt;/span&gt;acknowledge that everyone desires to enjoy their career, whatever career path they chose.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;We &lt;/span&gt;assert that the quality of life enjoyed by each employee is a cornerstone to product quality, productivity, and the resulting success of the company.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;We &lt;/span&gt;claim that trust is essential and therefore champion trust building policies and take the initiative.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;We &lt;/span&gt;assert that a company should not be paternalistic, the power to reward and punish is too powerful to be centered into the hands of a few or even one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;We &lt;/span&gt;recognize that the financial situation of the company must influence decisions and that this information must be shared.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight:bold;"&gt;trust &lt;/span&gt;building policies include:&lt;br /&gt;&lt;br /&gt;Company wide &lt;span style="font-weight:bold;"&gt;disclosure &lt;/span&gt;of salaries and other benefits.&lt;br /&gt;&lt;br /&gt;Company wide &lt;span style="font-weight:bold;"&gt;disclosure &lt;/span&gt;of the financial status of the company presented in an honest and straightforward manner.&lt;br /&gt;&lt;br /&gt;Company wide &lt;span style="font-weight:bold;"&gt;reviews of all&lt;/span&gt; employees such that everyone one's position is just as safe or unsafe as anyone else's position.&lt;br /&gt;&lt;br /&gt;Company &lt;span style="font-weight:bold;"&gt;direction &lt;/span&gt;set through a consent basis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-8890494207009884605?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/8890494207009884605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=8890494207009884605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/8890494207009884605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/8890494207009884605'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/maverick-carta.html' title='The Maverick Carta'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-4122111785260393146</id><published>2008-01-21T18:56:00.000-08:00</published><updated>2008-01-21T18:57:04.680-08:00</updated><title type='text'>Layoffs and an Open Book Policy</title><content type='html'>Layoffs can occur for many reasons. The first one that comes to mind&lt;br /&gt;is that company income is not sufficient to support the current&lt;br /&gt;number of employees. Another reason I have witnessed is that you&lt;br /&gt;company merges with another company and there are departments that&lt;br /&gt;are now duplicated. Often these duplicate departments are H.R.,&lt;br /&gt;Finance, I.T., etc.&lt;br /&gt;&lt;br /&gt;Another reason for a layoff is to reassign the money that was going&lt;br /&gt;towards salaries. Whatever the reason, the company wants to spend its&lt;br /&gt;money on something other than salaries. Could be the company is going&lt;br /&gt;to pursue a new direction or buy out a competitor. The bottom line is&lt;br /&gt;the company needs to free up some cash.&lt;br /&gt;&lt;br /&gt;For the general work force a layoff is typically a surprise. Yes,&lt;br /&gt;there may be rumors floating about, but when it finally happens it&lt;br /&gt;usually surprises most.&lt;br /&gt;&lt;br /&gt;Now imagine a different type of work environment. Imagine that the&lt;br /&gt;books are open and the conversations of the Executive Committee and&lt;br /&gt;the Board of Directors is made known to the entire company. Also&lt;br /&gt;imagine that you are just an employee, lets say a software developer&lt;br /&gt;working on your company's search engine and indexing technology.&lt;br /&gt;&lt;br /&gt;With this open book policy you find yourself with information. With&lt;br /&gt;information you can make decisions, choose how much risk you want to&lt;br /&gt;take, plan your future, make predictions for the future, etc.&lt;br /&gt;&lt;br /&gt;Scenario A:&lt;br /&gt;Suppose the information indicates that there is a dramatic downturn&lt;br /&gt;in profits. You know about it as soon as the EC and Board know. There&lt;br /&gt;are those that oppose the open book policy and through the use of&lt;br /&gt;uncertainty and doubt say, "We can't have an open book policy because&lt;br /&gt;if people hear about the down turn they will start to quit in droves&lt;br /&gt;and thus worsen the situation and make it impossible for the company&lt;br /&gt;to implement a plan inorder to turn things around." I personally&lt;br /&gt;think that this attitude under estimates the worth of a company that&lt;br /&gt;implements an open book policy and underestimates the employee. If&lt;br /&gt;you were to work for a company that gave you all of the information&lt;br /&gt;then you would value that aspect, that distinguishing aspect, of the&lt;br /&gt;company and you would not want to leave the company on a whim and you&lt;br /&gt;would want the company to succeed. Also, with the open book policy&lt;br /&gt;you can know that information from your department is making it to&lt;br /&gt;the top and that the information is accurate (accurate in the areas&lt;br /&gt;where you have knowledge and responsibility). This omni-directionaly&lt;br /&gt;flow of information will enable you to have confidence that the EC&lt;br /&gt;and Board are making informed decisions. This makes the company even&lt;br /&gt;more appealing to you. If the EC and Board are planning for layoffs&lt;br /&gt;then you can make choices. Maybe you find another job. That saves&lt;br /&gt;your manager the stress of laying you off. It also saves the company&lt;br /&gt;the severence payouts and paperwork and such. Also, it allows you to&lt;br /&gt;leave with dignity and keeps the door open for when the company&lt;br /&gt;rebounds. Maybe you can't find another job and you are laidoff.&lt;br /&gt;Because the process was open the chances of illegalities may be&lt;br /&gt;reduced. You definetly couldn't choose the people to layoff by race,&lt;br /&gt;gender, etc. It would be likely that you would layoff people by&lt;br /&gt;teams, departments, and divisions and it would be less likely that&lt;br /&gt;people could protect their "friends" by transferring them off of a&lt;br /&gt;team that was to be let go and placing them onto a team where they&lt;br /&gt;would not be laidoff. The protecting of friends and special employees&lt;br /&gt;are one of the things that make layoffs so personal and so hurtful&lt;br /&gt;and damaging. Also, for defense against a possible future layoff it&lt;br /&gt;causes people to play games and work on only the cutting edge teams,&lt;br /&gt;both of which are not in the companies interest. (This makes me think&lt;br /&gt;of all of the games we play at work inorder to protect our jobs and&lt;br /&gt;how they are not in the best interest of the company and how people&lt;br /&gt;say that open book policies are not in the best interest of the&lt;br /&gt;company. Clearly the argument to do things in the best interest of&lt;br /&gt;the company is not sound because the current mode of operation for&lt;br /&gt;most companies support "games", politics, posturing, and positioning.)&lt;br /&gt;&lt;br /&gt;Scenario B:&lt;br /&gt;The company wants to take $1,000,000.00 that was going for salaries&lt;br /&gt;and use it to buy out a small startup company. The open book policy&lt;br /&gt;allows you to know about this choice as soon as it happens. Since the&lt;br /&gt;EC and Board know that everyone will know about this choice they will&lt;br /&gt;also have taken time to consider the ramifications. A layoff while&lt;br /&gt;the company is profitable is tricky at best. I myself have survived a&lt;br /&gt;few such layoffs and you always wonder why they did the layoff, which&lt;br /&gt;usually becomes apparent 3 to 6 months down the road, and you always&lt;br /&gt;feel lessened or devalued. Back to the story... so the EC and Board&lt;br /&gt;has decided to layoff and have considered such things as salary&lt;br /&gt;reductions and taken a loan. So you know, because of the open book&lt;br /&gt;policy, that the EC and Board has considered many options. Since they&lt;br /&gt;have decided to reduce the work force then they have decided to&lt;br /&gt;reduce the work as well. The open book policy allows you to see in&lt;br /&gt;which areas the company is going to ellimate work. Maybe this time&lt;br /&gt;they pick who goes and who stays based on the previous performance&lt;br /&gt;review (that is why I think that that a Maverick-ish review process&lt;br /&gt;is so important). I believe that if you do it on a performance score&lt;br /&gt;then you have to let everyone go that falls into the catagory. Let me&lt;br /&gt;give an example. Suppose that the performance scores are from one to&lt;br /&gt;ten. The company decides to let everyone go that got less that a 7.&lt;br /&gt;Also the company knows that they want to layoff around 60 employees&lt;br /&gt;inorder to recapture that 1 million bucks. Know imagine that 85&lt;br /&gt;people got below 7. I believe it is fair to layoff the 85 if you are&lt;br /&gt;going to base it on performance. If you decide you are going to keep&lt;br /&gt;15 of the 85 then you have the potential for the problems of "games",&lt;br /&gt;politics, good ol'boy network, and such things as Pedro promising you&lt;br /&gt;his protection. If 85 is too many then only layoff those that got a 6&lt;br /&gt;and below. Suppose that number is 47. Then you don't raise the&lt;br /&gt;million solely on layoffs, and the company then decides to take a&lt;br /&gt;loan or reduce everyone's salary (and I mean everyones) by a&lt;br /&gt;percentage.&lt;br /&gt;&lt;br /&gt;End Scenario&lt;br /&gt;&lt;br /&gt;When a traditional company has layoffs it is very very messy. Messy&lt;br /&gt;in that it puts into play all kinds of things. Some people are hurt.&lt;br /&gt;Some people loose confidence. Why, because traditional companies&lt;br /&gt;always paint blue skies and dangle sweet carrots (these aren't the&lt;br /&gt;only reasons why, but some... :-) ) I was at a company meeting where&lt;br /&gt;the employees suspected that a layoff might be needed. It was a&lt;br /&gt;friday. The EC was asked if there were any plans for a layoff. They&lt;br /&gt;said "NO". Monday morning the layoff started and 30% was let go.&lt;br /&gt;&lt;br /&gt;I have been at companies that have laidoff and then within 3 months&lt;br /&gt;or so they want to hire. Usually because of attrition after the&lt;br /&gt;layoff. They ask us if we know of any good people that we could get&lt;br /&gt;to submit their resume. We all sit there and give them a blank stare.&lt;br /&gt;Why would we bring our friends in when we don't know if we may be&lt;br /&gt;talking our friend out of a good job to come to work here at this&lt;br /&gt;company and then get laidoff 3 weeks later.&lt;br /&gt;&lt;br /&gt;Open book benefits both ends of the employee spectrum. The bottom&lt;br /&gt;know what the top is up to. The top knows that the bottom has&lt;br /&gt;reported correctly because the bottom checks that the reports made it&lt;br /&gt;to the top. A Maverick style review process insures that if you have&lt;br /&gt;to do a layoff based on performance that the performance scores are&lt;br /&gt;as accurate and up to date as possible. Open books help elliminate&lt;br /&gt;practices that are not in the best interest of the company. I feel&lt;br /&gt;these practices are extremely expensive. These practices include&lt;br /&gt;personal agendas, back stabbing, networking, protection schemes, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-4122111785260393146?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/4122111785260393146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=4122111785260393146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/4122111785260393146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/4122111785260393146'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/layoffs-and-open-book-policy.html' title='Layoffs and an Open Book Policy'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-9287899765803324</id><published>2008-01-21T18:54:00.000-08:00</published><updated>2008-01-21T18:56:07.104-08:00</updated><title type='text'>Maverick "like" companies</title><content type='html'>Of course there is Semco lead by Ricardo Semler.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Do you know of any "maverick" type companies?&lt;br /&gt;&lt;br /&gt;We know of the GE Durham facility.&lt;br /&gt;It seems that Car Fax has some things going for it.&lt;br /&gt;There is Johnsonville Sausage as well.&lt;br /&gt;&lt;br /&gt;I know there are groups advocating certain aspects:&lt;br /&gt;www.worldblu.com&lt;br /&gt;http://evolutionarysystems.net/&lt;br /&gt;&lt;br /&gt;And the amount of people talking about this on the web is growing.&lt;br /&gt;&lt;br /&gt;http://jeremy.zawodny.com/blog/archives/006273.html&lt;br /&gt;http://www.leighfarnell.com/docs/ManagersIntoCoaches.pdf&lt;br /&gt;http://ccs.mit.edu/21c/21CWP001.html&lt;br /&gt;http://www.tonellomanagement.com/NewsDetail.asp?NewsID=26&lt;br /&gt;http://was4.hewitt.com/hewitt/resource/rptspubs/subrptspubs/next_generation.pdf&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-9287899765803324?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/9287899765803324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=9287899765803324' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/9287899765803324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/9287899765803324'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/maverick-like-companies.html' title='Maverick &quot;like&quot; companies'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-5740856604968258673</id><published>2008-01-21T18:53:00.001-08:00</published><updated>2008-01-21T18:53:55.299-08:00</updated><title type='text'>Adopting parts of Maverick / Maverick best practices</title><content type='html'>Is it possible to adopt parts of Maverick style management but not&lt;br /&gt;the whole?&lt;br /&gt;&lt;br /&gt;This brings up some issues. First let me contrast this to a common&lt;br /&gt;topic, can you adopt parts of XP and gain /most/ of the benefits?&lt;br /&gt;&lt;br /&gt;I have found that most people adopt TDD and continuous builds, throw&lt;br /&gt;in some code coverage, use some type of standup meeting, and call it&lt;br /&gt;good.&lt;br /&gt;&lt;br /&gt;The reason I bring up XP is that TDD has been identified by many as&lt;br /&gt;the major contribution of XP.&lt;br /&gt;&lt;br /&gt;So, to answer this question about Maverick style businesses, are&lt;br /&gt;there some /parts/ that can be identified as the major contributors?&lt;br /&gt;&lt;br /&gt;I think the major contributors are:&lt;br /&gt;1) Company-wide knowledge of salaries.&lt;br /&gt;2) Team based review process.&lt;br /&gt;3) Team based hiring process.&lt;br /&gt;&lt;br /&gt;What /parts/ do you think are the major contributors?&lt;br /&gt;&lt;br /&gt;If items 1-3 are a subset of the complete Maverick style of business,&lt;br /&gt;what are the other items that make up a Maverick style business?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-5740856604968258673?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/5740856604968258673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=5740856604968258673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/5740856604968258673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/5740856604968258673'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/adopting-parts-of-maverick-maverick.html' title='Adopting parts of Maverick / Maverick best practices'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-5240321221126027662</id><published>2008-01-21T18:51:00.001-08:00</published><updated>2008-01-21T18:51:47.899-08:00</updated><title type='text'>Opportunities for major improvements and advances</title><content type='html'>I was just thinking about software development over the years. I&lt;br /&gt;don't know if I will be able to express these thoughts in 'text' but&lt;br /&gt;I will try.&lt;br /&gt;&lt;br /&gt;There are many many things that have to come together for&lt;br /&gt;improvements in software development process.&lt;br /&gt;&lt;br /&gt;These things (IMO) include:&lt;br /&gt;a) the development environment, including the build system, the&lt;br /&gt;language, etc.&lt;br /&gt;b) the demand of the market, such as an almost insatiable appetite&lt;br /&gt;for new software&lt;br /&gt;c) Corporate Government, such as a rebalancing of power in a company&lt;br /&gt;where the technical units are not dominated by the business units in&lt;br /&gt;a fashion that constricts growth or stifles thought.&lt;br /&gt;&lt;br /&gt;Imagine this:&lt;br /&gt;You are on writing software for a machine that you can not have&lt;br /&gt;access to but for 2 hours a day. You write your programs on cards.&lt;br /&gt;Your turn comes and you hope your program "loads". In such an&lt;br /&gt;environment you will not be apt to conceive the notion of continuous&lt;br /&gt;builds. It is not an environment that is ready for such thought.&lt;br /&gt;&lt;br /&gt;Imagine this:&lt;br /&gt;You are writing software in C on a Unix machine in the early '80s.&lt;br /&gt;Your salary is well above average. The machine you access through&lt;br /&gt;your terminal is a major capital expenditure. Libraries and seperate&lt;br /&gt;compilation units are available to you now. You have access to the&lt;br /&gt;hardware all day, but your compiles take a long time because of the&lt;br /&gt;time-sharing of the machine. You are thinking in terms of abstract&lt;br /&gt;structures and you are aggregating fundamental types into domain&lt;br /&gt;concepts. Memory is expensive. Disk space is expensive. You are&lt;br /&gt;frustrated with the slow build times. You are frustrated with memory&lt;br /&gt;management. You are frustrated with the debugger. There are so few&lt;br /&gt;programmers that in order to utilize their skills more thoroughly&lt;br /&gt;divisions appear such as Testing/QA and Product Management because&lt;br /&gt;the developers are too expensive to use for other tasks. Because of&lt;br /&gt;this the waterfall approach is used to serialize the tasks just as&lt;br /&gt;developers would serialize tasks to be batched and ran on the&lt;br /&gt;computers. Immediately it was recognized that feed-back loops and&lt;br /&gt;recursion could help, and notice that both of these ideas are from&lt;br /&gt;computer science (and electrical engineering).&lt;br /&gt;&lt;br /&gt;Now imagine today:&lt;br /&gt;We have desktop machines that are more powerful than the original&lt;br /&gt;super computers. We can distribute programming easily. Threading is&lt;br /&gt;easy. So, what can we focus on? Continuous build. Rapid feedback. We&lt;br /&gt;can focus on improving the software process once again! What shows&lt;br /&gt;up? XP, Crystal, Lean, etc. Were the ideas that form the basis of&lt;br /&gt;thesse process had only by Beck or Cockburn? No, many many people&lt;br /&gt;were having similar thoughts working through similar problems. I&lt;br /&gt;don't want to diminish their contribution, because there were many&lt;br /&gt;many people that were happy with the state of software development as&lt;br /&gt;well. We can see the division even today.&lt;br /&gt;&lt;br /&gt;Now imagine tomorrow:&lt;br /&gt;What I have been describing is "overcoming constraints". When&lt;br /&gt;development is not the bottleneck who is? What changes are going to&lt;br /&gt;happen? After these constraints are removed it will eventually fall&lt;br /&gt;back on development and when it does what will be the focus for&lt;br /&gt;improvement?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-5240321221126027662?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/5240321221126027662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=5240321221126027662' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/5240321221126027662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/5240321221126027662'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/opportunities-for-major-improvements.html' title='Opportunities for major improvements and advances'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-3327175239394005034</id><published>2008-01-21T18:50:00.001-08:00</published><updated>2008-01-21T18:50:45.515-08:00</updated><title type='text'>My Vision for Maverick Software Development</title><content type='html'>A friend asked me about my vision for Maverick. Since it doesn't make&lt;br /&gt;any money, why do it?&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------&lt;br /&gt;Ah, my Maverick vision you want (said in Yoda voice).&lt;br /&gt;&lt;br /&gt;I would like to have a Wiki where there are sections that match your&lt;br /&gt;situation. Let's say you are a one man band and you want to do XP.&lt;br /&gt;There's a section. Say you are a member of a Spiral Team on a DoD&lt;br /&gt;contract. There is a section for you.&lt;br /&gt;&lt;br /&gt;Also all of the books are online and living. Suppose XP Explained was&lt;br /&gt;on the Maverick Wiki. We don't have to wait for editors and&lt;br /&gt;publishers. If there is a change it shows up. Imagine the discussion&lt;br /&gt;on BDD versus TDD in a Maverick world. We all talk about it, and if&lt;br /&gt;BDD is deamed more appropriate, we refactor the text to be BDD.&lt;br /&gt;&lt;br /&gt;I know there is big business in writing books, etc. But I don't see&lt;br /&gt;how it is the best way to deliver ideas to the development community.&lt;br /&gt;I am not motivated by money in Maverick. I realize that the authors&lt;br /&gt;of these books are also consultants and my idea is going to be met by&lt;br /&gt;resistence because I am saying that their part of the business is not&lt;br /&gt;necessary.&lt;br /&gt;&lt;br /&gt;So, I would like enough members that believe in Maverick and are&lt;br /&gt;found in enough different sectors to build up the repository of&lt;br /&gt;living information on how to develope software.&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;So there you have it. I am "bucking" traditional software development&lt;br /&gt;from "every concievable angle".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-3327175239394005034?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/3327175239394005034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=3327175239394005034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/3327175239394005034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/3327175239394005034'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/my-vision-for-maverick-software.html' title='My Vision for Maverick Software Development'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-8448422227158543652</id><published>2008-01-21T18:46:00.000-08:00</published><updated>2008-01-21T18:49:54.973-08:00</updated><title type='text'>Intent revealing code...</title><content type='html'>From my personal experience (many many years of it) I find that there&lt;br /&gt;are some people's code that is easy to read and understand and there&lt;br /&gt;are other's that is not. One person's intent revealing code is not&lt;br /&gt;always intent revealing to someone else.&lt;br /&gt;&lt;br /&gt;It would seem ill-advised to try to understand a design in XP if you&lt;br /&gt;cannot understand code.&lt;br /&gt;&lt;br /&gt;If that is true, it would mean that anyone who is concerned with the&lt;br /&gt;design has to be someone who understands code. Programmers understand&lt;br /&gt;code. Who else really understands code?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-8448422227158543652?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/8448422227158543652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=8448422227158543652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/8448422227158543652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/8448422227158543652'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/intent-revealing-code.html' title='Intent revealing code...'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-7192594452735893514</id><published>2008-01-21T18:44:00.000-08:00</published><updated>2008-01-21T18:45:53.699-08:00</updated><title type='text'>TDD'ers have run a muck...</title><content type='html'>I am re-writing my &lt;a href="http://home.comcast.net/~gslinker/maverick/Scouting.html"&gt;Scouting &lt;/a&gt;paper. The idea is that if code tests are&lt;br /&gt;good for upfront, why not include other types of tests or experiments?&lt;br /&gt;&lt;br /&gt;I want to show that Software Scouting and Reconn is a natural part of&lt;br /&gt;design.&lt;br /&gt;&lt;br /&gt;I was looking for some definitions of TDD and Test First Development&lt;br /&gt;so that I could show the relationship I know exists between TDD and&lt;br /&gt;Software Scouting/Reconn.&lt;br /&gt;&lt;br /&gt;I came across this:&lt;br /&gt;&lt;br /&gt;http://www.xprogramming.com/xpmag/testFirstGuidelines.htm&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Test-Code-Simplify cycle (Quoted verbatim from "Extreme&lt;br /&gt;Programming Applied", p159)&lt;br /&gt;&lt;br /&gt;Write a single test&lt;br /&gt;Compile it. It shouldn't compile, because you haven't written the&lt;br /&gt;implementation code it calls&lt;br /&gt;&lt;br /&gt;Implement just enough code to get the test to compile&lt;br /&gt;Run the test and see it fail&lt;br /&gt;&lt;br /&gt;Implement just enough code to get the test to pass&lt;br /&gt;Run the test and see it pass&lt;br /&gt;&lt;br /&gt;Refactor for clarity and "once and only once"&lt;br /&gt;&lt;br /&gt;Repeat&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I find it completely wierd that I "have to" compile something I know&lt;br /&gt;will not compile. I also find it just as troubling that I have to run&lt;br /&gt;a test that I know will fail.&lt;br /&gt;&lt;br /&gt;This is what I call a methodology gone amuck. Steps for steps sake&lt;br /&gt;IMO.&lt;br /&gt;&lt;br /&gt;What is the goal of TDD?&lt;br /&gt;&lt;br /&gt;IMO it is to help design the code. It is a design process. My&lt;br /&gt;thoughts should be about "how do I want to use this system", "what do&lt;br /&gt;I expect from the call into the system", "what domain terminology is&lt;br /&gt;needed/used by this call into the system", "which subdomain will&lt;br /&gt;handle this behavior", "what objects exist in the caller's world&lt;br /&gt;versus the callee's world", you know, those kinds of thoughts are&lt;br /&gt;going through my head.&lt;br /&gt;&lt;br /&gt;What is not going through my head is following some "hard coded"&lt;br /&gt;steps!&lt;br /&gt;&lt;br /&gt;I don't think TDD has gone amuck, but I think that the description of&lt;br /&gt;what it is doing is lacking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-7192594452735893514?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/7192594452735893514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=7192594452735893514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/7192594452735893514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/7192594452735893514'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/tdders-have-run-muck.html' title='TDD&apos;ers have run a muck...'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-3553455936219809587</id><published>2008-01-21T18:37:00.000-08:00</published><updated>2008-01-21T18:38:30.889-08:00</updated><title type='text'>Simplicity versus Complexity</title><content type='html'>In many agile processes they say "do the simplest thing possible".&lt;br /&gt;&lt;br /&gt;I agree that you should not program some cool solution because you&lt;br /&gt;wanted to learn or use some technology or algorithm at the expense of&lt;br /&gt;those paying for the product.&lt;br /&gt;&lt;br /&gt;I think the Maverick value would be:&lt;br /&gt;&lt;br /&gt;We value 'lateral understanding' (if that is a term, based of of&lt;br /&gt;Lateral thinking) and then choosing the right solution.&lt;br /&gt;&lt;br /&gt;Near the bottom of my web site I say this:&lt;br /&gt;&lt;br /&gt;"You know with a flat-head screw driver, a pair of vice-grips, and a&lt;br /&gt;hammer you can fix almost anything but you can build almost nothing!"&lt;br /&gt;&lt;br /&gt;http://home.comcast.net/~gslinker/agile.html&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I came up with that saying outside of the context of discussing&lt;br /&gt;agile's idea that you must do the simplest thing.&lt;br /&gt;&lt;br /&gt;A flat head screw driver, vice-grips, and a hammer are very simple&lt;br /&gt;tools. They are the most common tools for household repairs. They are&lt;br /&gt;included in the toolbox of the carpenter or constructor, but they are&lt;br /&gt;accompanied by a myriad of other tools.&lt;br /&gt;&lt;br /&gt;People must know the complex solutions and when the are applicable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-3553455936219809587?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/3553455936219809587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=3553455936219809587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/3553455936219809587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/3553455936219809587'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/simplicity-versus-complexity.html' title='Simplicity versus Complexity'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-1270695224850495526</id><published>2008-01-21T18:36:00.000-08:00</published><updated>2008-01-21T18:37:16.715-08:00</updated><title type='text'>Agilista...</title><content type='html'>Agilista - a person doing some sort of agile development that doesn't&lt;br /&gt;seem to consider alternatives and that their agile approach is the&lt;br /&gt;right way to do it. They say things like, "you have to do X before&lt;br /&gt;Y", or if you say that the agile methodology didn't work they imply&lt;br /&gt;that you "did it wrong or skipped some step or you just aren't smart&lt;br /&gt;enough to get it." It is really funny too, some saying to embrace&lt;br /&gt;change but when you present an alternative you are a heretic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-1270695224850495526?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/1270695224850495526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=1270695224850495526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/1270695224850495526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/1270695224850495526'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/agilista.html' title='Agilista...'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-6194453047997280975</id><published>2008-01-21T18:35:00.002-08:00</published><updated>2008-01-21T18:36:21.918-08:00</updated><title type='text'>Can Code alone convey design information?</title><content type='html'>Is code sufficient for someone to understand the design or additional&lt;br /&gt;artifacts needed such as external design documentation?&lt;br /&gt;&lt;br /&gt;People learn in many ways. People have a preferred method of&lt;br /&gt;learning. Some of the current methods of learning are identified as&lt;br /&gt;Visual, Auditory, Reading/Writing, and Kinesthetic. In the absence of&lt;br /&gt;a physical handicap to one of the sensory systems, I feel that most&lt;br /&gt;people have a preferred method of learning for specific topics. When&lt;br /&gt;studying literature I find that learning through reading suffices for&lt;br /&gt;me. When studying architecture I find that visual learning is most&lt;br /&gt;appealing. When studying music I find that listening to music is more&lt;br /&gt;meaningful to me than reading the score. When studying mathematical&lt;br /&gt;topics I find that at some times a formula suffices and at other&lt;br /&gt;times I need a plot or graph. As well when studying chemistry,&lt;br /&gt;sometimes formulas suffice but other times 3D visualizations of&lt;br /&gt;compounds increase my ability and speed to learn. Does this mean that&lt;br /&gt;I am not a visual, nor an auditory, nor a reading/writing learner but&lt;br /&gt;that I am a Kinesthetic learner?&lt;br /&gt;&lt;br /&gt;I read this description of a Kinesthetic learner:&lt;br /&gt;The Kinesthetics group learns through all of the senses being&lt;br /&gt;stimulated, they also like suitable analogies, real life examples, or&lt;br /&gt;metaphors, and they learn through application.&lt;br /&gt;&lt;br /&gt;I am not sure what "type" of learning I am, but I do feel that I do&lt;br /&gt;learn and I do it through many different ways. I use all of my&lt;br /&gt;senses to internalize experience.&lt;br /&gt;&lt;br /&gt;To me there is significant difference in these two statements:&lt;br /&gt;"Internalize in the same way" (methods of learning)&lt;br /&gt;"Internalize the same" (results of learning)&lt;br /&gt;&lt;br /&gt;Internalize in some way refers to the preferred method of learning. I&lt;br /&gt;might prefer to internalize the design of a software system through&lt;br /&gt;the examination of UML diagrams, or I may internalize the design of&lt;br /&gt;a software system through the reading of the source code. Two&lt;br /&gt;different methods or ways of internalizing a software design. People&lt;br /&gt;that prefer UML are people that prefer to internalize the software&lt;br /&gt;design in the same way.&lt;br /&gt;&lt;br /&gt;Internalize the same refers to understanding the correct attributes&lt;br /&gt;of the topic. You can see with your eyes and hear with your ears but&lt;br /&gt;do you understand within your heart. The eyes and ears are the ways&lt;br /&gt;to internalize. The understanding within the heart is that one has&lt;br /&gt;truly understood. True understanding can come though many ways, but&lt;br /&gt;there is only one understanding.&lt;br /&gt;&lt;br /&gt;Since I am not formally trained in the field of Learning, my terms&lt;br /&gt;and definitions may not be standard, but if one will be patient in my&lt;br /&gt;weakness then maybe some learning can occur.&lt;br /&gt;&lt;br /&gt;Since I know I have learned through Visual, Auditory, Reading/Writing&lt;br /&gt;(VAR) then I know I use methods of information presentation based on&lt;br /&gt;all of these. I also believe that one can learn to consume new&lt;br /&gt;methods of presentation which may become a preferred method of&lt;br /&gt;presentation for specific topics. To me it is not conceivable that&lt;br /&gt;someone is limited to only one of these but my research on the topic&lt;br /&gt;leads me to believe that there are those that do believe that some&lt;br /&gt;are limited to one of these presentation methods in order to learn.&lt;br /&gt;Working on this assumption (which seems counter intuitive) let's&lt;br /&gt;consider the question that has been before the XP group.&lt;br /&gt;&lt;br /&gt;Is code sufficient for someone to understand the design or additional&lt;br /&gt;artifacts needed such as external design documentation?&lt;br /&gt;&lt;br /&gt;Let's suppose you learn through reading. XP seems to be optimized for&lt;br /&gt;this type of learner. After researching in five texts on XP I found&lt;br /&gt;that four of the books do not mention the topic of UML. I found all&lt;br /&gt;five to focus on little or no documentation. Also simple design and&lt;br /&gt;refactoring are the focus of discussion when referring to design.&lt;br /&gt;&lt;br /&gt;Simple and intent revealing is the description of how source code&lt;br /&gt;should be. Why should the code be this way? To avoid ambiguity. If&lt;br /&gt;the code is to communicate the design of the system it needs to do so&lt;br /&gt;with little or no ambiguity. "Code-talkers" is what I call people&lt;br /&gt;that can do this. These people can read and write code easily and&lt;br /&gt;through this they can build an understanding of a design that&lt;br /&gt;encompasses the code.&lt;br /&gt;&lt;br /&gt;Code-talkers preferred method of presentation is Reading and Writing.&lt;br /&gt;Given a team of code-talkers the hope is that each will understand&lt;br /&gt;the same design when they read the same code.&lt;br /&gt;&lt;br /&gt;I feel that the idea of using code to both capture a design and&lt;br /&gt;convey a design seems reasonable since all programmers clearly write&lt;br /&gt;code. But I wonder this, is the preferred method of presentation to&lt;br /&gt;learn something also the same method the person would use to present&lt;br /&gt;the thing that was learned. If you are good at learning through&lt;br /&gt;reading does that make you a good writer? If you are good at learning&lt;br /&gt;through graphs and charts does that make you capable of producing&lt;br /&gt;quality graphs and charts? If a programmer is good at capturing a&lt;br /&gt;design in code does it mean that he is good at conveying a design&lt;br /&gt;through code?&lt;br /&gt;&lt;br /&gt;I imagine that there are many that can learn visually through the&lt;br /&gt;studying and viewing of paintings. Out of those students of the&lt;br /&gt;visual arts, how many of them can communicate through the same&lt;br /&gt;medium, how many of them can paint? There seems to be a difference in&lt;br /&gt;the way one can learn and the way one can teach or share what they&lt;br /&gt;have learned.&lt;br /&gt;&lt;br /&gt;But back to the question at hand, is the code sufficient to convey a&lt;br /&gt;design or are additional artifacts necessary. If you can only learn&lt;br /&gt;with a single method of presentation then it would seem that in XP&lt;br /&gt;being a Reader would be advantageous. But what if your XP team is&lt;br /&gt;made up of a few people that prefer to study design through UML&lt;br /&gt;diagrams? In order to get feedback from the entire team there will&lt;br /&gt;have to be two methods of presentation of the design, one in code and&lt;br /&gt;one in UML. Granted both are visual but are significantly different.&lt;br /&gt;I have met many programmers that are code-talkers that can't&lt;br /&gt;understand a UML diagram. By introducing these diagram-talkers with&lt;br /&gt;these code-talkers the effort for communicating design has increased.&lt;br /&gt;Is it worth this increased work?&lt;br /&gt;&lt;br /&gt;I suggested the following idea to the XP discussion group:&lt;br /&gt;Maybe it would be better to hire people for your team that has the&lt;br /&gt;same preferred method of presentation of design in order to decrease&lt;br /&gt;the effort in communication.&lt;br /&gt;&lt;br /&gt;A concern was pointed out that having people that "think alike" would&lt;br /&gt;be detrimental to creativity.&lt;br /&gt;&lt;br /&gt;Do preferred methods of presentation affect one's creativity? The&lt;br /&gt;thought of me being more creative than someone else just because I&lt;br /&gt;can read seems arrogant. The idea that some method of presentation&lt;br /&gt;can stimulate more creative thought seems incorrect as well. Chinese&lt;br /&gt;are renowned for their ancient wisdom and philosophy. I imagine that&lt;br /&gt;the ancient Chinese taught their students with written text (but not&lt;br /&gt;limited to that method alone). Should modern students of philosophy&lt;br /&gt;switch to studying in Chinese in order to stimulate more create&lt;br /&gt;thoughts? What of the ancient Greek philosophers. Were they not&lt;br /&gt;considered to be creative in the field of philosophy? But we have two&lt;br /&gt;different types of written language, one phonetic and one pictorial.&lt;br /&gt;But I delve into areas where I have superficial knowledge, that is,&lt;br /&gt;the history of education in ancient China and ancient Greece.&lt;br /&gt;&lt;br /&gt;Is a blind person incapable of being as creative as a seeing person?&lt;br /&gt;A deaf person to a hearing person? I seem to recall that Beethoven&lt;br /&gt;wrote symphonies while he was deaf. Granted Beethoven once heard&lt;br /&gt;sound, but he didn't lose his creativity with the loss of the ability&lt;br /&gt;to hear.&lt;br /&gt;&lt;br /&gt;People with high IQ's are not necessarily considered creative&lt;br /&gt;individuals either.&lt;br /&gt;&lt;br /&gt;Were the ancient Aborigines of Australia less creative than the&lt;br /&gt;Renaissance man of Italy of France?&lt;br /&gt;&lt;br /&gt;It is suggested that creativity is not recognized in its own time but&lt;br /&gt;recognized at a later date. Large steps forward in some field are&lt;br /&gt;often not recognized for their foresight and worth for many years.&lt;br /&gt;&lt;br /&gt;A definition of creativity I like because it allows for everyone to&lt;br /&gt;be creative is this - creativity is work hard and going the extra&lt;br /&gt;mile to produce a quality product for a given domain. Practice and&lt;br /&gt;not innate talent seperates the creative from the mere compitent&lt;br /&gt;technician. (These definitions were found on the web).&lt;br /&gt;&lt;br /&gt;I conclude that a team made up of people with different preferred&lt;br /&gt;methods of presentation does not increase or descrease the creativity&lt;br /&gt;of the team.&lt;br /&gt;&lt;br /&gt;So, if creativity is not at risk then what is wrong with hiring&lt;br /&gt;people with the same preferred method of presenting design?&lt;br /&gt;(Remember we are working under the premise that some people have only&lt;br /&gt;one preferred method of receiving information, Reader/Writer, Visual,&lt;br /&gt;or Auditory. I personally don't think people are so one-dimensional).&lt;br /&gt;Would not not increase accurate communication? If you have to present&lt;br /&gt;the design in code an UML do both descriptions describe the same&lt;br /&gt;thing?&lt;br /&gt;&lt;br /&gt;Eventhough I think hiring people that prefer the same methods of&lt;br /&gt;presentation will not hurt creativity, I don't feel that it is&lt;br /&gt;realistic. When hiring a programmer there are many important factors&lt;br /&gt;that must be considered.&lt;br /&gt;From my experience most developers can read code well and understand&lt;br /&gt;UML well. If they are deficient in an area I have seen people learn&lt;br /&gt;how to read a UML diagram. Learning to read code is not as easy.&lt;br /&gt;&lt;br /&gt;This brings me to XP's concern of simple and intent revealing code.&lt;br /&gt;These two considerations are necessary inorder to have a chance at&lt;br /&gt;using the code as the design document or in other words "reading&lt;br /&gt;code."&lt;br /&gt;&lt;br /&gt;My first concern is that there is no such thing as simple code.&lt;br /&gt;Simple code is so subjective that few can agree on even the most well&lt;br /&gt;known algorithm's varied implementations as to which implementation&lt;br /&gt;is the simplest.&lt;br /&gt;&lt;br /&gt;I would suggest that we can determine if code is over-engineered.&lt;br /&gt;Over-engineerd code is code that has functionality that is never&lt;br /&gt;called upon or used. TDD and DBU both address this by only writing&lt;br /&gt;code that is needed. In Object Oriented programming you will see over-&lt;br /&gt;engineered classes that have many overloaded methods to do the same&lt;br /&gt;thing. The overloaded methods exist just incase someone wants to call&lt;br /&gt;the class in a slightly different way. These types of methods don't&lt;br /&gt;come about if one designs code using DBU or TDD.&lt;br /&gt;&lt;br /&gt;Intent revealing code is also important. This is done through careful&lt;br /&gt;use of names, naming conventions, and coding conventions. Code&lt;br /&gt;comments can be helpful if kept up to date.&lt;br /&gt;&lt;br /&gt;So, if you have intent revealing code that is not over-engineered and&lt;br /&gt;you have code-talkers you can have the code be the design as long as&lt;br /&gt;the only audience of the design is the programmers. If someone that&lt;br /&gt;is outside of the team wants to see a design then you have a&lt;br /&gt;situation. XP addresses this by saying the design isn't really want&lt;br /&gt;you want to see (these aren't the droids you are looking for), you&lt;br /&gt;want to see delivered and working code.&lt;br /&gt;&lt;br /&gt;If you use UML to describe the design does that mean you don't care&lt;br /&gt;about not over-engineered code and code that does not reveal its&lt;br /&gt;intent. No.&lt;br /&gt;&lt;br /&gt;Do methods embrace diversity or do they seek conformity? Do methods&lt;br /&gt;seek out people that are alike in some way? Once again I will use XP&lt;br /&gt;as an example.&lt;br /&gt;&lt;br /&gt;Pair programming is part of XP. This is needed inorder to assist with&lt;br /&gt;design as you go and making sure that the code is not over-engineered&lt;br /&gt;and intent revealing. I know a programmer that has a diagnosed&lt;br /&gt;disorder in which he is terrified of close interaction with people.&lt;br /&gt;This person is not capable of pair programming. Does XP reach out to&lt;br /&gt;this person seeking their unique contributions or does it shun this&lt;br /&gt;person because of his inability to pair program.&lt;br /&gt;&lt;br /&gt;I remember a study where it was shown that women learn better in&lt;br /&gt;quiet environments and men learn better where there is background&lt;br /&gt;commotion. With the common work area of XP does this environment&lt;br /&gt;empower the person that needs quiet and no distractions or does it&lt;br /&gt;reject this persons because they can not excel in the environment?&lt;br /&gt;&lt;br /&gt;If we are going to require certain abilities from the team then are&lt;br /&gt;there other abilities that should be required?&lt;br /&gt;&lt;br /&gt;Any methodology will exclude one set of attributes while inviting&lt;br /&gt;another set.&lt;br /&gt;&lt;br /&gt;It has been suggested by a friend that programming itself is a Visual&lt;br /&gt;task and has rewarded only the visual learners and excluded the&lt;br /&gt;others. I can imagine this to be true.&lt;br /&gt;&lt;br /&gt;In conclusion I feel that most people have varied preferred methods&lt;br /&gt;of presentation for different topics. I also feel than many people&lt;br /&gt;can learn new methods of presentation. A person that prefers a&lt;br /&gt;particular method of presentation when receiving information doesn't&lt;br /&gt;mean that person is capable of using that same method of presentation&lt;br /&gt;when conveying what they know or understand. People with the same&lt;br /&gt;preferred method of presentation do not think alike, two readers can&lt;br /&gt;read the same text and come to different conclusions. Creativity is&lt;br /&gt;not controlled by a person's preferred method of presentation.&lt;br /&gt;Methodologies optimize for certain characteristics and exploits the&lt;br /&gt;commonality. XP needs people that can work in pairs, work in&lt;br /&gt;environments that potentially have more commotion than say a private&lt;br /&gt;office, and can understand software design through reading code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-6194453047997280975?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/6194453047997280975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=6194453047997280975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/6194453047997280975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/6194453047997280975'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/can-code-alone-convey-design.html' title='Can Code alone convey design information?'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-975580200344474510</id><published>2008-01-21T18:35:00.001-08:00</published><updated>2008-01-21T18:35:25.980-08:00</updated><title type='text'>Fundamental Rule of Test Driven Development (TDD)</title><content type='html'>a) "Isn't the fundamental rule of TDD to write no line of code except&lt;br /&gt;in response to a failing test?"&lt;br /&gt;&lt;br /&gt;The above quote was taken from a discussion elsewhere.&lt;br /&gt;&lt;br /&gt;I agree with the statement, but I do so carefully.&lt;br /&gt;&lt;br /&gt;I feel that the higher rule is something like:&lt;br /&gt;&lt;br /&gt;b) "The fundamental rule of TDD is to specify /how/ to /use/ some&lt;br /&gt;code and its /results/ before becoming involved with the&lt;br /&gt;implemenation of that use."&lt;br /&gt;&lt;br /&gt;To me they are significantly different.&lt;br /&gt;&lt;br /&gt;(a) emphasizes a failing test.&lt;br /&gt;(b) emphasizes a desired usage and results.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Why do I knit-pick over the sublties? Because in Maverick Development&lt;br /&gt;I am concerned that the /reason/ for a practice be very clearly&lt;br /&gt;present. With the reasons well known, then alternative approaches can&lt;br /&gt;be applied to satisfy the reason. That is very important to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-975580200344474510?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/975580200344474510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=975580200344474510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/975580200344474510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/975580200344474510'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/fundamental-rule-of-test-driven.html' title='Fundamental Rule of Test Driven Development (TDD)'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-2995709312351843584</id><published>2008-01-21T18:34:00.001-08:00</published><updated>2008-01-21T18:34:29.614-08:00</updated><title type='text'>Sustainable pace and Crunch mode...</title><content type='html'>I would like to reiterate my position on crunch mode.&lt;br /&gt;&lt;br /&gt;Crunch mode can work under the correct circumstances.&lt;br /&gt;&lt;br /&gt;I was reminded of this topic while searching the web. I came across a&lt;br /&gt;site by Eugene Wallingford.&lt;br /&gt;&lt;br /&gt;http://www.cs.uni.edu/~wallingf/blog/archives/cat_5.html&lt;br /&gt;&lt;br /&gt;He points out that the "Agilistas" are so focused on the issue of&lt;br /&gt;sustainable pace that it is rarely mentioned that "crunch mode" can&lt;br /&gt;work.&lt;br /&gt;&lt;br /&gt;I suppose the Agilistas do this because they are fighting what they&lt;br /&gt;consider a bigger battle and can't open the discussion until&lt;br /&gt;management understands that sustainable pace is important.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is a snippet from Eugene's site:&lt;br /&gt;&lt;br /&gt;At least one person, though, argued that crunch mode can work. The&lt;br /&gt;gist of SirGilligan's claim is that a software team can go faster and&lt;br /&gt;still do quality work -- but only for a well-defined short term. He&lt;br /&gt;even used a running metaphor in defining such a crunch time: 'We are&lt;br /&gt;not 1/3 along the way, we are in the straight-a-way and heading for&lt;br /&gt;the finish line'. How can developers win the expectations game in&lt;br /&gt;such a scenario? The end is clearly in sight:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Pending features are well defined. Order of feature implementation&lt;br /&gt;is defined. Team is excited for the chance to deliver. It is the&lt;br /&gt;team's choice and idea to crunch, not some manager's idea. We enter&lt;br /&gt;crunch mode! After we deliver everyone gets the following Friday and&lt;br /&gt;Monday off for a four-day weekend!'&lt;br /&gt;&lt;br /&gt;That sounds an awful lot like what a runner does when she races a&lt;br /&gt;marathon or half-marathon faster than she thinks otherwise possible.&lt;br /&gt;The pending goal is well-defined. The runner is excited to deliver.&lt;br /&gt;She chooses to push faster. And, after the race, you take a few days&lt;br /&gt;off for rest. A party, of course, is always in order!&lt;br /&gt;&lt;br /&gt;I think the great ones are able to manage their expectations in a way&lt;br /&gt;that allows them to do more than usual for a short while. The good&lt;br /&gt;news for the rest of us is that we can learn to do the same, which&lt;br /&gt;gives us the ability to succeed in a wider variety of circumstances.&lt;br /&gt;Just always keep in mind: You can't keep going faster indefinitely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-2995709312351843584?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/2995709312351843584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=2995709312351843584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/2995709312351843584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/2995709312351843584'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/sustainable-pace-and-crunch-mode.html' title='Sustainable pace and Crunch mode...'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-2910667157613290617</id><published>2008-01-21T18:33:00.001-08:00</published><updated>2008-01-21T18:33:43.336-08:00</updated><title type='text'>Feature Set, Product Quality, and Ship Date</title><content type='html'>Most of us remember the idea that there are three variables in&lt;br /&gt;software development and no one can define more than two of those.&lt;br /&gt;&lt;br /&gt;For example the Marketing Team may pick the feature list and the ship&lt;br /&gt;date but quality will be undefined OR unspecified.&lt;br /&gt;&lt;br /&gt;Another example would be the Marketing team says they need something&lt;br /&gt;to show at a certain date and it must be ship quality and the&lt;br /&gt;development team then says we can have 6 of the 9 features done by&lt;br /&gt;that date.&lt;br /&gt;&lt;br /&gt;I want to focus on quality. Quality software at least the attribute&lt;br /&gt;that it doesn't corrupt data, doesn't leak private information,&lt;br /&gt;doesn't calculate incorrect results, doesn't report things wrong...&lt;br /&gt;(This list is not complete, just a guide)&lt;br /&gt;&lt;br /&gt;If a GUI truncates a field because a textbox isn't big enough then&lt;br /&gt;that is not a quality GUI because the value is not shown. Imagine if&lt;br /&gt;the text box shows you what you will be billed and it shows $99 but&lt;br /&gt;in reality it is $999.&lt;br /&gt;&lt;br /&gt;With this fuzzy definition in mind I want to now say that Quality is&lt;br /&gt;always set to high. Since Quality is now a constant there are only&lt;br /&gt;two variables and no one group can set both values.&lt;br /&gt;&lt;br /&gt;Marketing can provide the feature list and development the delivery&lt;br /&gt;date.&lt;br /&gt;&lt;br /&gt;Marketing can provide the delivery date and development provide the&lt;br /&gt;feature list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-2910667157613290617?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/2910667157613290617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=2910667157613290617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/2910667157613290617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/2910667157613290617'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/feature-set-product-quality-and-ship.html' title='Feature Set, Product Quality, and Ship Date'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-2365787430166335499</id><published>2008-01-21T18:32:00.000-08:00</published><updated>2008-01-21T18:33:02.062-08:00</updated><title type='text'>I don't know, it doesn't matter to me, I don't care</title><content type='html'>Learning to honestly say, "I don't know, it doesn't matter to me, I&lt;br /&gt;don't care" are important to having discussions.&lt;br /&gt;&lt;br /&gt;Suppose you are in a meeting discussing the implementation of a&lt;br /&gt;feature. They ask those in attendance for ideas. Don't through out&lt;br /&gt;ideas just for the sake of having an idea. Don't dissagree with an idea&lt;br /&gt;just to show you have an opinion. It is ok to say, "I don't know, it&lt;br /&gt;doesn't matter to me, I don't care".&lt;br /&gt;&lt;br /&gt;Just a thought.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-2365787430166335499?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/2365787430166335499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=2365787430166335499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/2365787430166335499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/2365787430166335499'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/i-dont-know-it-doesnt-matter-to-me-i.html' title='I don&apos;t know, it doesn&apos;t matter to me, I don&apos;t care'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-2292280399608914903</id><published>2008-01-21T18:31:00.000-08:00</published><updated>2008-01-21T18:32:26.308-08:00</updated><title type='text'>Solution looking for a problem</title><content type='html'>Have you ever had an idea and had it criticized as "a solution looking&lt;br /&gt;for a problem"?&lt;br /&gt;&lt;br /&gt;If you are a leader in your organization and someone present an idea&lt;br /&gt;and you find yourself about to say "that is nice, but there is no&lt;br /&gt;business need that this idea addresses" you should stop and listen.&lt;br /&gt;Listen and think. I challenge that the weakness in the idea is in the&lt;br /&gt;presentation. When people come up with ideas they are addressing a&lt;br /&gt;problem that the perceive. However in their anxiousness to make their&lt;br /&gt;presentation they assume that everyone recognizes the problem.&lt;br /&gt;&lt;br /&gt;So, listen and then call them back in a bit later and review with them&lt;br /&gt;their idea as you have understood it and then focus on the problem or&lt;br /&gt;business need the idea addresses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-2292280399608914903?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/2292280399608914903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=2292280399608914903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/2292280399608914903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/2292280399608914903'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/solution-looking-for-problem.html' title='Solution looking for a problem'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-925392784152824194</id><published>2008-01-21T18:30:00.002-08:00</published><updated>2008-01-21T18:31:12.240-08:00</updated><title type='text'>Quality Code</title><content type='html'>Code has many facets and each can have a quality level.&lt;br /&gt;&lt;br /&gt;A short analogy.&lt;br /&gt;&lt;br /&gt;What is a quality car?&lt;br /&gt;If a car has well behaved driving characteristics then some will say&lt;br /&gt;it is a quality car.&lt;br /&gt;&lt;br /&gt;If a car has a low problem/issue rate then some will say it is a&lt;br /&gt;quality car.&lt;br /&gt;&lt;br /&gt;If a car has a good paint job and well fiting fenders and doors some&lt;br /&gt;will say it is a quality car.&lt;br /&gt;&lt;br /&gt;If a car has an engine that is well balanced and smooth running some&lt;br /&gt;will say it is a quality car.&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;&lt;br /&gt;What is quality code?&lt;br /&gt;&lt;br /&gt;Can a manager that is not a programmer recognize quality code?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-925392784152824194?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/925392784152824194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=925392784152824194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/925392784152824194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/925392784152824194'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/quality-code.html' title='Quality Code'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-1321802900630515075</id><published>2008-01-21T18:30:00.001-08:00</published><updated>2008-01-21T18:30:25.442-08:00</updated><title type='text'>Firing your boss...</title><content type='html'>Have you ever been told that "you are empowered"?&lt;br /&gt;Have you ever been told that "you should feel more ownership"?&lt;br /&gt;Have you ever been told that "you should act like an owner"?&lt;br /&gt;&lt;br /&gt;I say, "Give me the power to fire my boss" and I would then feel&lt;br /&gt;empowered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-1321802900630515075?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/1321802900630515075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=1321802900630515075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/1321802900630515075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/1321802900630515075'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/firing-your-boss.html' title='Firing your boss...'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-7186069789355439025</id><published>2008-01-21T18:29:00.001-08:00</published><updated>2008-01-21T18:29:51.513-08:00</updated><title type='text'>Market Debt</title><content type='html'>I think everyone agrees that when we don't verify as we go, and&lt;br /&gt;we don't integrate as we go then we build up a cost to be paid&lt;br /&gt;later. That cost is fixing bugs in code that was wrote months ago.&lt;br /&gt;That cost is in /big bang integration/. The term is Code Debt.&lt;br /&gt;Agile processes help keep code debt down.&lt;br /&gt;&lt;br /&gt;But what about Market Debt. Getting behind in the market, maybe&lt;br /&gt;you aren't releasing features fast enough, or you are missing big&lt;br /&gt;sales events, and such as that. I call that "Market Debt".&lt;br /&gt;&lt;br /&gt;Do all activities that keep code debt down also keep market debt&lt;br /&gt;down?&lt;br /&gt;&lt;br /&gt;I am going to try to show how agility keeps code debt down and&lt;br /&gt;market debt down. By this we should get more buy in from sales&lt;br /&gt;and marketing. The more buy in the better!&lt;br /&gt;&lt;br /&gt;Design By Use - Keeps code debt down by /integration first/&lt;br /&gt;approach.&lt;br /&gt;&lt;br /&gt;Test Driven Development - Keeps code debt down by writing only&lt;br /&gt;the code that is needed, instead of trying to anticipate how&lt;br /&gt;someone /might/ call your system.&lt;br /&gt;&lt;br /&gt;Continuous build - keeps code debt down by verifying the&lt;br /&gt;product is integrated and has only the code that was needed.&lt;br /&gt;&lt;br /&gt;Quick Meetings - keeps code debt down by reporting what is&lt;br /&gt;necessary and allows them to get back to /work/ quicker.&lt;br /&gt;&lt;br /&gt;Dashboards - keep code debt down by showing progress, and&lt;br /&gt;not just any progress, but meaningful progress.&lt;br /&gt;&lt;br /&gt;Customer Acceptance - Prioritizes and organizes the right&lt;br /&gt;functionality for the right time frame.&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;&lt;br /&gt;Design By Use - Keeps market debt down by faciliting the&lt;br /&gt;earliest release of end to end functionality.&lt;br /&gt;&lt;br /&gt;Test Driven Development - Keeps market debt down by&lt;br /&gt;delivering the /right/ system.&lt;br /&gt;&lt;br /&gt;Customer Acceptance - Keeps market debt down by considering&lt;br /&gt;the window of opportunity and the delivering of quality software&lt;br /&gt;for the time frame the customer has identified as important, or in&lt;br /&gt;other words, delivering to the market.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-7186069789355439025?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/7186069789355439025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=7186069789355439025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/7186069789355439025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/7186069789355439025'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/market-debt.html' title='Market Debt'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-8297845360660070481</id><published>2008-01-21T18:27:00.000-08:00</published><updated>2008-01-21T18:28:50.182-08:00</updated><title type='text'>Manipulation in the work place.</title><content type='html'>Is there /any/ room for manipulation in the work place?&lt;br /&gt;&lt;br /&gt;Ok, let me focus the use of the term manipulation.&lt;br /&gt;&lt;br /&gt;Manipulate a person to do a task that will advance your career,&lt;br /&gt;position, or a favorable perception by those above you.&lt;br /&gt;&lt;br /&gt;Can anyone give an account of being manipulated that your remember as&lt;br /&gt;something /good/ ???&lt;br /&gt;&lt;br /&gt;I can not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-8297845360660070481?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/8297845360660070481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=8297845360660070481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/8297845360660070481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/8297845360660070481'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/manipulation-in-work-place.html' title='Manipulation in the work place.'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-4464946689456866184</id><published>2008-01-21T18:25:00.001-08:00</published><updated>2008-01-21T18:25:49.707-08:00</updated><title type='text'>Agile methods are not agile...</title><content type='html'>Agile methods are not agile.&lt;br /&gt;&lt;br /&gt;Methods are nothing more than methods. They can not act. Thus they can&lt;br /&gt;not be agile.&lt;br /&gt;&lt;br /&gt;People can be agile. Choices can be made based on the need to change&lt;br /&gt;and are called agile choices.&lt;br /&gt;&lt;br /&gt;XP can be no more agile than the people that make up the XP team.&lt;br /&gt;None of the methods can be anything more than the results of the&lt;br /&gt;actions of the people that make up the team.&lt;br /&gt;&lt;br /&gt;I have already heard about non-agile XP teams that resist change and&lt;br /&gt;say, "XP says it has to be done this way. If we do what you say then we&lt;br /&gt;are not an XP house."&lt;br /&gt;&lt;br /&gt;People that don't understand the values of XP will struggle to&lt;br /&gt;make /agile/ decisions. As many people race to embrace instead of&lt;br /&gt;understand, XP may become as rigid as any methodology we have ever seen.&lt;br /&gt;&lt;br /&gt;And this makes me say, methodologies are not rigid, but the people that&lt;br /&gt;implement them.&lt;br /&gt;&lt;br /&gt;Just like in the waterfall days... when I ask to change something from&lt;br /&gt;up stream and my manager said, "The medology that we use here does not&lt;br /&gt;allow that." I said, "Wrong, you don't allow it." He didn't get the&lt;br /&gt;point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-4464946689456866184?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/4464946689456866184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=4464946689456866184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/4464946689456866184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/4464946689456866184'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/agile-methods-are-not-agile.html' title='Agile methods are not agile...'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-1054701745805336402</id><published>2008-01-21T18:22:00.000-08:00</published><updated>2008-01-21T18:23:22.545-08:00</updated><title type='text'>Can refactoring code ever be bad?</title><content type='html'>Definition:&lt;br /&gt;Refactoring is a disciplined technique for restructuring an existing&lt;br /&gt;body of code, altering its internal structure without changing its&lt;br /&gt;external behavior. Its heart is a series of small behavior preserving&lt;br /&gt;transformations. Each transformation (called a 'refactoring') does&lt;br /&gt;little, but a sequence of transformations can produce a significant&lt;br /&gt;restructuring. Since each refactoring is small, it's less likely to go&lt;br /&gt;wrong. The system is also kept fully working after each small&lt;br /&gt;refactoring, reducing the chances that a system can get seriously&lt;br /&gt;broken during the restructuring.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Suppose there is a piece of C# code that you wish to use. Let's assume&lt;br /&gt;that you have the option to:&lt;br /&gt;1) Add the source file containing the code into your project.&lt;br /&gt;2) Add a class library which contains the functionality to your&lt;br /&gt;project.&lt;br /&gt;3) Copy the piece of C# code and put it into your existing project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lets imagine some scenarios with each choice:&lt;br /&gt;1) After adding the source file to your project it is refactored and&lt;br /&gt;now internally it calls a routine in another class library. Now you&lt;br /&gt;have a dependency and coupling to the other class library.&lt;br /&gt;&lt;br /&gt;2) After adding the class library to your project the class library is&lt;br /&gt;refactored and there is a new dependency on an RPC type call. You now&lt;br /&gt;have a networking/rights dependency to the remote functionality.&lt;br /&gt;&lt;br /&gt;3) After copying the piece of C# code the original changes. You are&lt;br /&gt;not&lt;br /&gt;coupled the the changing implmentation, as a matter of fact you have&lt;br /&gt;no&lt;br /&gt;external coupling at all.&lt;br /&gt;&lt;br /&gt;Scenario (2) is the most common in my current work and it is a&lt;br /&gt;problem.&lt;br /&gt;If a method is refactored and it now makes an RPC or WebServices call&lt;br /&gt;and my application exists outside the firewall that protects these low&lt;br /&gt;level back end services then there are problems. You not only couple&lt;br /&gt;to&lt;br /&gt;implementation that the code represents you couple to the&lt;br /&gt;implementation of the system configuration.&lt;br /&gt;&lt;br /&gt;Suddenly copying and pasting code has a renewed appeal.&lt;br /&gt;&lt;br /&gt;Before one lectures me on the problems and smells of duplicated code I&lt;br /&gt;am aware of them. What if there is a bug in this copied code, then you&lt;br /&gt;have to trace down everywhere the bug exists which is nearly&lt;br /&gt;impossible? Well, there are no bugs in the code. It was well tested&lt;br /&gt;and&lt;br /&gt;found to be bug free. What if there is an optimization that would&lt;br /&gt;greatly improve performance? Performance is not an issue for this&lt;br /&gt;code.&lt;br /&gt;If it becomes an issue for this particular use then it will be&lt;br /&gt;optimized. Just because it is not "fast" enough in one application&lt;br /&gt;doesn't mean it isn't fast enough in another. Maybe the optimization&lt;br /&gt;would increase resource utilization and that is something "I" don't&lt;br /&gt;want in my area.&lt;br /&gt;&lt;br /&gt;These scenarios are the results of a discussion concerning the con's&lt;br /&gt;of&lt;br /&gt;shared code. As I say in Maverick, "Shared code is code that someone&lt;br /&gt;else wrote that you don't trust."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-1054701745805336402?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/1054701745805336402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=1054701745805336402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/1054701745805336402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/1054701745805336402'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/can-refactoring-code-ever-be-bad.html' title='Can refactoring code ever be bad?'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-7714730042625438880</id><published>2008-01-21T18:21:00.000-08:00</published><updated>2008-01-21T18:22:29.948-08:00</updated><title type='text'>Efficiently using Office Space</title><content type='html'>I just had a thought about how the COO and the building "people" try&lt;br /&gt;to efficiently use office space.&lt;br /&gt;&lt;br /&gt;That is fine and all, but isn't it like the tail wagging the dog?&lt;br /&gt;&lt;br /&gt;In a software company the efficiency of the main bottleneck, which is&lt;br /&gt;development, should be the focus.&lt;br /&gt;&lt;br /&gt;I imagine a perfect work are like this:&lt;br /&gt;&lt;br /&gt;A large open area with large tables, lots of white boars, etc.&lt;br /&gt;&lt;br /&gt;Also, I imagine some smaller enclosed areas, one that can hold 5&lt;br /&gt;people, and the rest for 2 or 3.&lt;br /&gt;&lt;br /&gt;Finally I imagine some cubes with really tall walls.&lt;br /&gt;&lt;br /&gt;If we are developing on a platform that allows for terminals, then&lt;br /&gt;terminals are setup in all of these areas. If not, then the&lt;br /&gt;programmer's have laptops and there are monitors, keyboards, and mice&lt;br /&gt;setup in all of the areas for the developers to use and to connect.&lt;br /&gt;&lt;br /&gt;In this setup there would be rooms/areas emptie all of the time. But&lt;br /&gt;the use of the areas would match the needs of the developers for the&lt;br /&gt;task and issues at hand. Productivity on demand.&lt;br /&gt;&lt;br /&gt;But, the Building People would have a cow in most companies!&lt;br /&gt;&lt;br /&gt;Where is the costs? In the rent or in the developer's productivity?&lt;br /&gt;That is the question. If rent is killing you then I am going to bet&lt;br /&gt;your company doesn't make it anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-7714730042625438880?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/7714730042625438880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=7714730042625438880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/7714730042625438880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/7714730042625438880'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/efficiently-using-office-space.html' title='Efficiently using Office Space'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-2712209727615704954</id><published>2008-01-21T18:20:00.000-08:00</published><updated>2008-01-21T18:21:31.251-08:00</updated><title type='text'>How would you do it?</title><content type='html'>Suppose you are given the "backing" to start a software company.&lt;br /&gt;&lt;br /&gt;How would you select your employees?&lt;br /&gt;How would you select your processes?&lt;br /&gt;How would you strive for quality software?&lt;br /&gt;How would you strive to use the money wisely?&lt;br /&gt;How would you determine when to market your software?&lt;br /&gt;How would you determine the marketing medium?&lt;br /&gt;And end the end: How would you determine if your company was&lt;br /&gt;successful?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) I would select people that I knew at first. This would build the&lt;br /&gt;core team. Then we would expand as needed through the Maverick hiring&lt;br /&gt;process by auditions, all interviewees together in a meeting of&lt;br /&gt;presentation, and the chance for the interviewees to freely roam the&lt;br /&gt;facility for a couple of days. (Of course there would be non-&lt;br /&gt;disclosure agreements that would scare one half silly!)&lt;br /&gt;&lt;br /&gt;2) I would select the process the Maverick way. The core team would&lt;br /&gt;get together and make an educated guess on what is best. Then we&lt;br /&gt;would watch the process and question the steps and rearrange anything&lt;br /&gt;and everything until we felt we were as efficient as we could be.&lt;br /&gt;&lt;br /&gt;3) Quality comes through defining what we mean by quality, and then&lt;br /&gt;check or process to see if it takes us towards quality. If not then&lt;br /&gt;we redo item 2.&lt;br /&gt;&lt;br /&gt;4) The Maverick approach to money is simple and powerful. All&lt;br /&gt;financials are viewable at anytime by all employees. The financials&lt;br /&gt;are reported simply and straight forward. Revenue recognition will be&lt;br /&gt;as simple as possible (which would mean we recognize the revenue when&lt;br /&gt;it is ours to keep). All salaries are public knowledge. All budgets&lt;br /&gt;are public knowledge. (Public means employees in these cases).&lt;br /&gt;&lt;br /&gt;5) Determining when to market the software will be approached&lt;br /&gt;conservatively. By this I mean that the software will be developed by&lt;br /&gt;the process and not driven by non-related external factors such as&lt;br /&gt;dates set by marketing. Let me clarify. If the market window is&lt;br /&gt;identified as wide-open from now until 8 months out then we will&lt;br /&gt;decide what features can be done in that time. Then we say, "Is this&lt;br /&gt;set of features useful, and representative of our goals?" If it is&lt;br /&gt;not we do not try to do the impossible and say, "Well, we will work&lt;br /&gt;extra hard and get it done." We were already working extra hard. If&lt;br /&gt;the market window is closing from 9 months to 18 months then we&lt;br /&gt;consider what we can do. If the the window is closed at 19 months&lt;br /&gt;then we consider that as well. But in Maverick a Marketing staff&lt;br /&gt;member's estimates will be considered highly important and the person&lt;br /&gt;giving those estimates will be expected to justify them especially if&lt;br /&gt;they are wrong. (Maverick is tired of developer's estimates being&lt;br /&gt;used to beat developers over the head, everyone's estimates are&lt;br /&gt;crucial)&lt;br /&gt;&lt;br /&gt;6) Market medium would depend on were the customer can be found. That&lt;br /&gt;is, do they watch TV, then maybe a commercial. Do they read&lt;br /&gt;magazines... that kind of stuff. Know your customer or lose your&lt;br /&gt;customer.&lt;br /&gt;&lt;br /&gt;7) A company is considered successful very simply. Is it making&lt;br /&gt;enough money to pay the bills, pay the employees, and save some for&lt;br /&gt;the future? If it is, it is successful. Don't confuse this with the&lt;br /&gt;idea that happy employees mean the company is successful. That is a&lt;br /&gt;different issue that is addressed by some of the things mentioned&lt;br /&gt;above.&lt;br /&gt;&lt;br /&gt;That is how Maverick would do it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-2712209727615704954?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/2712209727615704954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=2712209727615704954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/2712209727615704954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/2712209727615704954'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/how-would-you-do-it.html' title='How would you do it?'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8390064019981582628.post-6574353129701792783</id><published>2008-01-21T18:18:00.000-08:00</published><updated>2008-01-21T18:19:31.559-08:00</updated><title type='text'>Shooting the Heroes and Cowboys</title><content type='html'>I was just reading a thread on extremeprogramming and someone asked&lt;br /&gt;about hero programmers and cowboys.&lt;br /&gt;&lt;br /&gt;People that build empires.&lt;br /&gt;People that will not delegate.&lt;br /&gt;People that re-write every part that some one else wrote.&lt;br /&gt;&lt;br /&gt;Topics:&lt;br /&gt;What are the tactics of these empire builders?&lt;br /&gt;How are the supported by the company/culture?&lt;br /&gt;How do you change them?&lt;br /&gt;How do you remove them?&lt;br /&gt;&lt;br /&gt;http://home.comcast.net/~gslinker/maverick/MaverickDevelopment.html&lt;br /&gt;&lt;br /&gt;If it isn't enough to have managers without true understanding I have&lt;br /&gt;watched developers dup management into believing heroics are required&lt;br /&gt;to develop software. Duped into believing that there is only a few&lt;br /&gt;that can develop the product and the rest of the developers take&lt;br /&gt;supportive roles. I have watched these clever developers build&lt;br /&gt;empires to protect themselves and become the prima donnas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have seen excellent developers black balled by these empire&lt;br /&gt;builders because the empire builders realized that this person was&lt;br /&gt;skilled enough to replace them. I have watched these empire builders&lt;br /&gt;wait for a power vacuum to occur and rush in and fill the gap. I have&lt;br /&gt;seen them target other developer's features that are late and&lt;br /&gt;secretly criticize the developer. Then, while the developer's&lt;br /&gt;reputation is in doubt, the hero works many late hours and rewrites&lt;br /&gt;the feature and presents it to management, which praises their effort&lt;br /&gt;and commitment to the company. The other developer is then regulated&lt;br /&gt;to a subservient position and his basically layoff fodder for the&lt;br /&gt;next round.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8390064019981582628-6574353129701792783?l=mavericksoftwaredevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mavericksoftwaredevelopment.blogspot.com/feeds/6574353129701792783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8390064019981582628&amp;postID=6574353129701792783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/6574353129701792783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8390064019981582628/posts/default/6574353129701792783'/><link rel='alternate' type='text/html' href='http://mavericksoftwaredevelopment.blogspot.com/2008/01/shooting-heroes-and-cowboys.html' title='Shooting the Heroes and Cowboys'/><author><name>Geoff Slinker</name><uri>http://www.blogger.com/profile/12365501393247949005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
