One of the thoughts that I had today while talking to a coworker was "who needs process when communication works better." Of course no one wants to hear that. Especially those on the management side of the house.
I am reading about how to have difficult conversations and I ran into this nifty little quote about successful companies:
One study of five hundred stunningly productive organizations revealed that peak performance had absolultely nothing to do with forms, procedures and policies that drive performance management. In fact, half of the highflyers had almost NO formal performance management processes.
What's behind their success? GOOD COMMUNICATION.
They go on to talk about how the good companies hold everyone accountable for their actions, regardless of level or position. If there is a problem, coworkers step up and discuss what went wrong or what is going wrong.
I think my team is on the right track. We have to continue to communicate and be open and not let the documents get in the way (I am seriously afraid of that). All inter-team communication needs to move away from the email and towards the blog. We should turn notifications on for our blog and really start to use it to document what is going on and depend less on email. The agile process means (to me) that we act like we all live across the country from each other, which forces communication and documentation of the nature that adds value and makes sense.
It frustrates me that people say "we must have business analysts to write the documentation" when most successful projects and companies DON'T have people that are dedicated to writing docs. The smart developers are going to provide the documentation needed. Smart developers are going to provide working software instead of mounds of documentation. Smart developers are going to talk to each other instead of relying on tools. Smart developers will seek out their customers to ensure they are meeting their requirements. Smart developers are going to respond to issues instead of saying, "this wasn't planned."
*Note* Quote was summarized and slightly altered. It comes from Crucial Conversations, also I was inspired by the Agile Manifesto for the last paragraph.
I would like to welcome my friend and coworker Scott to the blogosphere. Check out his blog, for he is much smarter than me :)
I have written in the past that I am not a big fan of testing. I have to change my tune a little bit. Building a library without testing would be insane. Building an application with just a little bit of testing is still ok in my book. My point? You always need testing of some kind, even if it is just a couple of tests. I find that I usually test validation and business logic the most in applications. I leave testing the front end to a human (because tweaking JSP's is hard to properly test) and the persistence layer is normally tested when you test the business logic. My friends tell me this is called integration testing. I call it "enough".
Until recently, I have never really been involved with writing a framework or library, so I didn't really have anything to base my opinions on when it came to that genre of code. I have been updating Jaxor to allow associating an entity with a list of entities with a single method call. Basically I am trying to make it easier to persist relationships. So, after making the changes that satisfy all of my initial tests, I wrote some more tests and they started failing. I fixed a couple of the problems that surfaced and wrote some more tests. It is very exciting to find a bug and know that it will not be coming back, because I have a test to prove that it is fixed. Testing is indispensable while building a library.
For the past couple of weeks I have been working on Jaxor, an Object Relational Mapping library that is based on Martin Fowler's PEAA. I have contributted a couple of updates and I have more in store that should make some things more semantic. One of the things that I am always asked at work is, why not use Hibernate? The answer for a while has been the fact that reflection is hard to debug. I think the answer now is, complexity. Check out the 2.0 DTD and you will see what I mean.
The DTD is very verbose. There is an element for everything that you can do in Hibernate. One-to-many, Many-to-many, bags... by the way, what is a bag? Anyway, the DTD is well commented and that reduces some of the complexity... but lets get back to Jaxor.
I often contemplate writing a tutorial, but Mike has already done a good job of covering the basics. Take a look at the docs on the Jaxor Site. If you want to know the theory, go buy Martin's book. I will probably write a tutorial in the next couple of days to help new users get started, but it isn't neccessarily needed.
One of the things I have been dealing with at work is a lack of personnel to do the menial tasks. We need paper for the printer, which means an engineer has to go hunt for paper. We need to buy a laptop, so instead of sending someone out to buy a laptop, an engineer has to go buy the laptop. We need documentation written, so the engineer, usually the one that is worst at expressing himself, has to write the documentation.
This really sounds like I am a lazy bum and don't want to do any work, but that is exactly the opposite of what I am trying to say. I think the engineers should be "engineering" and not hunting for paper in the catacombs of the basement or filling out the 15 forms (in triplicate) that you have to fill out to purchase a laptop. Right now those jobs fall onto the shoulders of an engineer or a manager, both of which are paid WAY to much to do this type of work, both of which have much more profitable things they could be doing.
The problem is, no one wants to pay a secretary the amount of money that is required to keep them happy. The only people that have secretaries anymore are lawyers and executives. I am not saying that each engineer should have his or her own secretary, I would be more than happy to share. And I don't think they should be called secretary, maybe personnel coordinator.
Here are some points explaining why Jr. Developer positions are open:
1. No one wants to be Jr. anything. Especially coming out of college.
2. Companies don't want to hire a Jr. person. That means they have to
spend money training on top of the over the top salary that they are
paying.
3. Salaries are completely out of control. It is very hard to
differentiate between a good developer and a poor developer salary
wise. Salaries should be similar to the effectiveness of a developer.
If I provide exponentially more code/value, then I should get paid
exponentially more as well, this will never happen primarily because
it is difficult to undo that which is already done.
This kicked off a lively email discussion between a couple of friends of mine, so I hope they post their thoughts here as well.
Martin Fowler says he prefers functional staff organization over technical staff organization, and I must say that I agree. My current client has moved all of the technologists out of the business units and into a "CIO" organization. It isn't working very well because the customers no longer have day to day conversations with the people that are building their applications. This leads to longer lifecycles and thus wasted money because of a lack in communications between functional and technical crews.
Most of the teams at the client site don't have an on-team functional expert, so when they talk to the customers the cranky "my old system used to do it this way, this new fangled way is unacceptable" person is the only one that is offered up to help determine the requirements. Any enhancements that the developers may wish to make to the system are swepted under the rug because it isn't "like the old system". I seem to have gotten lucky to be on a team that is small, nimble, smart and has a good representative of the customer that is forward thinking. I am probably on the most "agile" team onsite and love going to work every morning.
Mr. Fowler is right about another thing, the business units end up making their own solutions. "If you can't beat 'em, join 'em" is the only solution to this "breakdown". Let the techies and business units mix. But support communication between the techies in different business units through bulletin boards, blogs, wikis, and mailing lists.
Also, don't be so foolish as to give the techies two bosses. A former employer tried to create a dual chain of command and ended up going back to the old way. The concept looks good on paper, day-to-day you have a functional boss and your assessment is done by someone that knows your expertise, but quickly breaks down in the confusion of who am I supposed to call when I have need to change my health care provider. My functional boss, who knows what I am doing on a daily basis, is perfectly capable of judging whether or not I am effective even if they don't know the first thing about how to write code.
My Internet connection is pretty crappy. It exists, so I am happy about that, but it craps out from time to time so I keep a ping going. This is what I received when I CTRL+C'd it before going to bed:
Packets: Sent = 92299, Received = 90871, Lost = 1428 (1% loss),
Approximate round trip times in milli-seconds:
Minimum = 13ms, Maximum = 948ms, Average = 8ms
Can someone explain how the average could be BELOW the minimum?
Growing up my mom made a couple of different dishes that I really liked. I have recently been bitten by the cooking bug (it probably has something to do with working so much closer to home) so I thought I would start cooking some of my favorites from my childhood. Hopefully they become my kidd's favorites too. Anyway, I am preserving these recipes for all time on my blog.
Open Can and drain. Crumble salmon into bowl. I go through and take out the fatty part, but you could probably leave it in. Put about 10 saltine crackers crumbled up in the bowl. Add the egg and some chopped onion (dry that comes in a jar) or you could use the real thing. Then mix it all up. Put oil into a skillet & let it get hot. Take the salmon and make it into patties and put flour on both sides. Cook until it is brown. Makes about 6-7 patties. I always like to have mashed potatoes and green peas with it.
Mitch Kapor wrote a while back:
Business success needs to be measured not just by profit, but by social impact as well.
One of the things our government is currently trying to do is just that, make the media companies more aware of their corporate actions. Unfortunately, they are going about it all wrong through censorship. Humorously, censorship is what started America.
A group of hippies in Old Europe got fed up with the status quo and set sail to found a new country, forever changing the way governments work. It was a new technological environment that allowed this act to happen. For the first time, many people could travel across the sea to the "New World". Of course it was dangerous and many people died on the way, and many more died once they got there, but sailing across the Atlantic opened the door for great changes.
Howard Stern and others are getting censored, and they will go someplace else to express their views. Extremists are moving to the web to express their views. The common man is moving to the web to express their views, which is why blogging has taken off like it has. The web has bridged a new gap, world-wide communication, and will forever change the world. Our government will change to fit into the new environment, or we will all move to Mars and try again.
My wife went to tuck my youngest son into bed tonight and was greeted with a question, "Do you know why I like to read before bed Mommy?" My wife asked why and my son's response was, "Because no one disturbs me and the only noise is the crickets."
Alan Green really cracks me up. In a recent post he was talking about how vendors want to make tools so easy that even non programmers can write code! I was cracking up. I have missed so much since leaving the Internet a month ago. It is good to be back!
Verizon has a very annoying installation application. It is aimed squarely at non-technical types, which means it will do nothing but bug the hell out of us techies. I must say, it was well done and I think my mom would be able to do an install... that is if the Verizon servers were actually working.
The DSL light on the DSL modem would only stay on for 2 minutes before it would start blinking, meaning no connection. While going through the setup for the first 8 times, the program would get to the point where it was supposed to connect to the Verizon servers and the DSL would go out. Of course there is no way to skip to the end, so every time you had to start over from the beginning.
After a while the DSL light stayed on, but the install would never complete. So, I decided to give Verizon a call. "Please stay on hold while we assist other customers. The current wait time is... 30 minutes." Yipee. After 15 minutes they hung up on me. Typical. So I wanted another 10 minutes and gave them a call back. Same speil, "30 minutes". About 20 minutes later I got a human on the line and they walked me through setting the modem up and creating a password and all of the other fun hoops you have to jump through to get online.
So, this is my first post from my new house, using my new DSL in my new computer room. WOOT! Now I just have to get the networking setup so the rest of the family can use the internet too :)
DSL was installed today! WOO HOOOO! I will have Internet connectivity for the first time in over a month. YEAH!!