Feed on
Posts
Comments

Back in 1987, I gave my dad, Danko, a mini-cassette recorder and told him to just talk into it and tell some stories.

After more than 15 years, 11 years after his death, I found them in a box when I was unpacking in Detroit.  There are over 4 hours of stories that have been transcribed — even more that haven’t.  My sister Patricia transcribed them verbatim.  I was pissed at the time because my dad’s grammar wasn’t all that good — now I can hear his voice in the type.  She was right to do it that way, and I can’t believe that she did so much.

Here’s one of the first stories.  It dates probably from the early 1920s.

Continue Reading »

I’ve just spent more than a year working in a development group. We sit around a big oval table and work. We meet there, write code there, prepare presentations there, eat lunch there. There’s no “head” of the table; no “kids table”. It’s an island, and everyone’s on it. We’re all equals, peers and have as much to learn as we have to teach. There’s no politics. No heroes. No wallflowers. There’s just “the work”. Oh, and it’s just plain fun. Every freekin’ day.

Cubicles are the worst invention in the history of business. I’m still trying to think about how/why somebody thought this was a good idea. The only thing I can come up with is a secret society of Janitors, maintenance people and office furniture salespersons have formed some kind of plutocracy that actually control how we work.

Cubes make sense if you just take them in a two-dimensional plane. They are configurable in thousands of ways. You get a desk. You get a chair. You get some drawers and overhead storage. It locks. When you’re not there, you can put everything away and it’s all pretty and clean. And beige, or gray, or some kind of color that a tribe in Peru may call “Llama Vomit”. They were made for another place and time.

I have sat in cubes for the last 15 years except on a few wonderful occasions. They all pretty much looked the same. High walls that caused you to “gopher” when any kind of sound or personal communication was needed. Cramped and created so you face away from your door, so collaborating with anyone or even coming into another’s cube is an unexpected interruption at best, downright startling at worst. If you’ve been sentenced to a cube, how many of you have “rear view mirrors” or your monitor is positioned in such a way as you can see shadows behind you?

Of course, if you’re some kind of “middle manager”, you might have one of the “bigger” cubes that have a “desk” that protrudes through the middle and allows others to sit at it facing you. You get to be the “boss”, because it’s “your” cube, “your” desk, and others are there to seek your patronage. Now think about it. You’re really not going to do any “serious” business and your superiors sitting in their offices are showing that they have given you no “real” power. If you raise your voice above a whisper, you’ll be heard by persons 20 feet away. Nothing important or sensitive can be discussed there, so a “meeting room” must be booked or squatted in. Worthless.

Cubes have fabric walls and fixed furniture. Want to do some design? Where do you put the whiteboards? How do you collaborate? There’s drawers everywhere, and cubes are designed to stick your monitor in the corner (designed when monitors were 17″ wide and 20″ deep, too) and anyone working with you at your desk will be constantly banging their knees in the crappy “guest” chair that he’s borrowed from the cube around the wall.

Then there’s the cube farm. Row upon row of cubes in a giant room. 6 feet high, 50-75 feet wide and 150 feet long. The rows have hastily-printed pieces of paper in fourteen-point type that tells you who “lives” down that row. It’s like some kind of weird Stalinist housing project gone horribly wrong.

But it’s really easy to keep “looking” clean (whether it’s actually “sanitary” is debatable). I’t easy for your boss to walk down the row and quickly see who’s there and if everyone’s working. Everyone has their place. Everyone knows their job. Everyone is pounding away, waiting for 5 o’clock or a meeting to come up on their dilapidated, ancient version of Outlook, or the biannual review.

It’s also a Petri Dish of the germs that kill a company. People don’t collaborate. People have to book meeting rooms just to have any kind of communication, and that communication is delayed until the meeting room can be booked or until the “weekly” standing meeting because nobody actually talks or can collaborate in a free flowing environment. If someone has a question, they must get up, find the target person’s cube and interrupt whatever they are doing, simply because they have no idea if they are busy or not and have wasted time walking many yards across a room just to get a quick answer, and as soon as they “peek in”, the unwanted distraction has occurred. Politics and backstabbing occur in a cubicle environment. People “go back” to their cubes to stew, and only communicate by email or instant messenger. How many times have you read a message or mail and misread the intention of the sender? How often has a sender sent you an email and beat the thing to your cube so he/she can interrupt you anyway, just to ensure that you’ve been “papered”? How many times have you heard gossip wafting over your cube?

Cubes are STUPID-expensive and?inefficient. A single cubicle can cost upwards of $2000. Each cube takes up large amounts of empty space. It is expensive to move, very heavy and incredibly bulky to store. They have all the character of a minivan. An area that has 5 cubicles can support 10 persons sitting around a large, comfortable table with the best chairs, open lighting, a possible view out the window and… wait for it… face-to-face interaction!

What I’ve found out as I’ve sat around a table with 6 colleagues is:

  • You can’t lie to anyone when you stare them in the face 8 hours a day, 200 days a year
  • Nobody gossips, ever
  • There is no disciplinary action — your peers keep you on the straight and narrow — you have to face your colleagues and pull your weight
  • If you have a question, you either ask the person you’re working with, or you wait until they have a free moment
  • Meetings start and end on time, and most of the time, nobody gets up. We schedule meetings not only by looking at calendars, we actually go around the room and make sure that the time is good for everyone.
  • We more often than not eat lunch together at our table
  • There’s no heroes, no chumps, no wallflowers and everyone carries their own weight
  • If there is a knowledge gap that needs to be filled, the group will find a solution through pair programming, mentoring or pointing out the best places to find the information
  • There’s just not a lot of paper, ever
  • People TALK instead of EMAIL; the amount of time I’ve spent reading my email has dropped dramatically. I don’t even leave my email program up in plain site, anticipating some communication.
  • The room is bigger — with no walls, the air flows freely around the room, light comes in from the windows and shadows are cast by human beings
  • There are no “cold cubes” or “hot cubes” because of ceiling vent positioning
  • We’re all happy to come to work. Stupid-happy. We all get along. We know things about our families and care about making sure that everyone is lifted to make the team, and the company a better place
  • It’s better to “run with the Buffalo” instead of standing in your own poop with like a steer

And the biggest thing I’ve learned? We innovate. We invent. We create great code because we’ve combined our best practices. There’s no real “leader”, no “tail end charlie”. We write code with few bugs.

We get things done.

I’m doing the best work of my career. I have the best working relationships of my career. I have the best bosses in my career, I know exactly what is expected of me, have confidence in my place in my group, and feel empowered and sometimes humbled by the abilities of my colleagues. I feel respected and willingly give respect. I am happy.

The cube has become a Dinosaur Feed Pen. It’s long past it’s sell-by date in the modern corporation. In fact, it might be the single-largest factor in an unhappy and unproductive environment. Let me tell you, the happier your workers are, the better off you are. Would you like happy or sad people to build your car? How about unhappy airline mechanics? Do you want people that write the code, the intellectual capital of your eCommerce or IT department to feel like people are watching them all the time, or that they will be constantly interrupted, or wasting time to go somewhere to “get some air”? Companies face the necessity of cutting budgets and squeezing dimes to make a dollar. Simply sitting around a table with a great wireless connection, a projector, screen, places to put cards and some whiteboard space, will yield huge dividends.

PDF Creator    Send article as PDF   

Excuse the politics.  Whether you’re a Republican or Democrat, I think the Koch Brothers are despicable.  Winning dirty isn’t patriotic, it’s acting like a Banana Republic Dictator.  The Koch Brothers represent the “do-anything-to-win” attitude that has made American Politics utterly, insanely and treasonously confusing.  Here are some companies that directly funnel money to these weasels, and I hope you’ll think of this next time you go to a store.  Included are some other companies for your consideration.  I haven’t set foot in a WalMart in more than 15 years, and never will again, anyway, but this is definitely reinforcement.
Koch Products & Companies

- Angel Soft
- Angel Soft Ultra tissues
- Brawny paper towels
- Dixie cups (& napkins & plates)
- Insulair cups
- Mardis Gras napkins
- Perfect Touch (cups, paper products)
- Sparkle paper towels
- Stainmaste­r
- Quilted Northern
- Vanity Fair napkins & paper towels
- Zee Napkins

All Georgia Pacific products

Home/Offic­e papers:
- Advantage
- Image Plus
- Spectrum

Industrial coatings and materials:
- Lycra
- Teflon

Some other companies that contributed to the Walker Campaign and subsequent union busting regulation:

Wisconsin Realtors
Koch Industries (obvs.)
Wal-Mart
Tavern League of Wisconsin
AT&T

PDF Printer    Send article as PDF   

The Problem to Solve

Many web applications collect financial information to submit as leads for loans, credit card applications, bank information or other purposes. To ensure that the submitted SSN is valid, a validation algorithm must be implemented against the submitted value. Many websites in their infancy check only for length and null, but there is actually a formula that is published by the government to further qualify the SSN in the form field. By validating this SSN further, the quality of the generated lead is increased, which will have direct impact on the value of the data.

The algorithm we’ll construct is based on the following formulaic instruction:

“A valid SSN is determined by the following rules according to the website http://www.ssa.gov/employer/ssnweb.htm

Area-Group-Serial (AAA-GG-SSSS) The Social Security number consists of nine (9) digits. The first three (3) digits denote the area (or State) where the application for an original Social Security number was filed.

Within each area, the group number (middle two (2) digits) range from 01 to 99 but are not assigned in consecutive order. For administrative reasons, group numbers issued first consist of the ODD numbers from 01 through 09 and then EVEN numbers from 10 through 98, within each area number allocated to a State. After all numbers in group 98 of a particular area have been issued, the EVEN Groups 02 through 08 are used, followed by ODD Groups 11 through 99.

Within each group, the serial numbers (last four (4) digits) run consecutively from 0001 through 9999.”

So, for reference, just in case: The first three digits are the “Area” reference. The second two digits are the “Group” reference, and the final four digits are the “Serial Number” value.

We’ll create a validator that checks to ensure that the social security number is the right length (stripped of dashes and white spaces), is all numbers, and finally implements the Social Security Administration’s formula for the Area/Group validation and their list of invalid SSNs. Continue Reading »

Update from an article originally published by me in 2007

Alignment is everything

For many years, managers in the software industry submitted budgets that were unrealistic to Business Unit managers that had no clue as to what to question, what to approve or where to cut. As business has grown up and increased its expectations of IT departments, Development and Infrastructure has also been forced to mature and face the fact that they aren’t an “overhead” cost. This is especially true in eCommerce.

The Best is the enemy of the Good

I’ve never met an Engineer or Manager of Engineers that didn’t see an infrastructure project as vital to the organization’s ongoing health and stability. I’ve seen (and been) that Manager before. They’ve actually been wrong more than they’ve been right. The reason for this is the lack of a complete picture of the goals of the organization as a whole, the priorities for various Development/Infrastructure (DEV-INF) projects, and the fact that budgeting exists because resources are finite. Sometimes an eCommerce site can limp along for years on a code base that is far from the ideal architecturally, but it may cost far less to maintain and extend it than to upgrade it to the “Next Great Killer Platform” at the cost of revenue-driven projects.

The Holistic view of a Budget

While all projects will have some value, it’s important to prioritize projects in alignment with the overall organization’s strategy and objectives. There is no use in a complete re-architecture of the site when current demands of Marketing, Consumer Experience and other various Business Units cannot be met. The goal in eCommerce is simple. Keep the business growing, keep the site in “five nines”, and refine the user experience to increase conversion. DEV-INF budgets must play in this ballpark or, as a development leader, all credibility with Business Units will be lost; ultimately will leding to a breakdown in communications between Engineering and Business, which is a crisis in an eCommerce workplace.

Metrics are the key

Once projects are aligned with Corporate Objectives, it’s vital to show all cost drivers for these expenses. Many times the cost of ongoing maintenance is not factored in, but can be as much as 65% of an overall budget. This is also true for time budgeted for QE/QA. While the individual Engineer writing code may only write 250 lines that finally make it into production in a three-month long project, how many times he/she had to write it, how much time was eaten up managing and checking this code, and finally what documentation, knowledge transfer and future extendibility these 250 lines will have also affect costs. All these things must be taken into consideration.

Budgeting isn’t just all planning. Once the planning is complete, the spending begins. Vital in this aspect is accountability and assessment of performance. Hard, industry-standard metrics exist to gauge the performance of DEV-INF budget items. In eCommerce I’ve found many easily measured values:

  1. Actual vs. Proposed Development times.
  2. Actual vs. Proposed Resources.
  3. Pre-release bugs.
  4. Post-release bugs.
  5. Effects upon site stability and performance.
  6. Did the Project “Do” what the owners said it would do?
  7. Were the expectations of Business Units met, and are these stakeholders satisfied with the results?
  8. Did any problems that come up get handled in appropriate manners?
  9. Were in-place processes broken?

Approaches

Approaches to DEV-INF budgeting should be aligned with the current culture and expectations of the Business. They must have significant buy-in by various business stakeholders. If business drivers have “skin in the game” as to line-items in a DEV-INF budget, this automatically give credibility to it and also act as a check to make sure that I’ve done my homework. Many successful organizations use the Consolidated Projects Approach to budgeting and allocation for DEV-INF projects with outstanding success. In a nutshell:

Consolidated Projects List basic points:

  • IT budget planning process starts before the organization’s process.
  • IT managers submit summary project data for consolidation into a single spreadsheet
  • These projects are then sorted and prioritized by DEV-INF managers before submission to the overall business Prioritization Committee.
  • The Prioritization Committee decides how these projects are to be aligned, budgeted and implemented within the entire Organization’s overall Business needs and strategies.

This approach provides Senior Executives with a complete picture of all proposed projects, their costs, and priority ranking; these units will have a “30,000 foot” picture to make a more informed decision. Total project requirements may now be viewed as a single picture to senior management; priorities become a decision factor. No single group can drive pet projects or non-revenue generating development without prioritization or fully understanding what the business impact or opportunity costs involved are.

This process may be extended with Gate Checks to assure relevance to the goals of the company as time changes. This is especially true with larger organizations that may be widely distributed. Projects can often times have huge scope (ah — to de-scope, another topic!) and can take months of development time.? The needs of a business can change over this period, and any project that is underway should have enough flexibility to move with the times or the business stakeholders or group as a whole should have the gumption to kill or suspend development indefinitely or until such time as solid metrics warrant completion.

Free PDF    Send article as PDF   

Django has wonderful unit testing functionality built into the framework. It is often ignored because Django gives so much functionality “out of the box”, but this doesn’t mean that one shouldn’t do “their part” when extending the framework to build your own applications. Tests are a great way to “figure out” what needs to be done, then actually taking what you’ve learned to implement in the application proper.

My attempt here is to show how I used TDD in an Django application. We’ll create a basic project with a single application and use unit testing to figure out an algorithm an implement it in the application’s class. Continue Reading »

Django has become a friend of mine over the last year.  I had previous experience with Ruby on Rails, and was always disappointed when it came to deploying and productizing the application, and the actual framework APIs and implementations underwent too many changes over the last few years to give me the confidence I needed to go into production with it.  Python has been around forever;  it plays nice with Apache through the mod_wsgi and mod_python libraries, and with Django a RoR-like development framework appeared.  It’s not as quite as “fun” to use as Ruby on Rails, but it more than makes up for it when I step in front of an executive committee that is extremely concerned about risk, long-term maintenance and stability of both the platform and community.

I’ve been dancing around Pinax for a few months.  Their philosophy that “there are a few different categories of web applications and they share similar basic functionality – which shouldn’t have to be written from scratch every time something needs to get done,” is congruent with my beliefs. While writing greenfield applications is a source of delight for competent engineers, it is preferable to build on a solid foundation of “super-libraries” and add the functionality that is needed for your particular requirements. Continue Reading »

I recently upgraded my Dell Precision M90 Laptop to Ubuntu Karmic Koala. I’m running it standalone, no Windows anywhere. When I upgraded using ?apt-get upgrade? my touchpad didn?t work. Nothing. The touchpad was completely disabled. I assume that this is a problem on M70s, etc.

Found a fix after searching for two days; ? in case you’re having the same problem, here it is. Continue Reading »

Test Driven Development is mystical to any engineer that doesn’t have it as part of their development culture. ?Many shops don’t have the peer pressure and leadership that requires TDD in day-to-day operations. ?Others don’t see the need when working with Legacy Codebases. ?Some engineers have never written a unit test in their professional careers. ?No matter why Test Driven Development isn’t happening; once integrated into the engineering fabric of an organization, it will quickly take hold and spur productivity.

TDD is almost like riding a bike; you really don’t know how easy it is and how much fun you can have with it until you get up and going. When the training wheels are off, Test Driven Development (TDD) becomes a brand new world full of possibilities. Continue Reading »

I’m assuming that if you’re here you already know the basics of REpresentational State Transfer.  I’m also going to assume that you’ve looked at all the goodies at the Restlet community site.  Further, I’m thinking that you want a quick start guide to show you how to implement it.  The following tutorial shows how I “found a home” with Restlet, what worked for me, and hopefully something that will work for you, too.

The Restlet API is a Java framework for the REST architectural style. The Noelios Restlet Engine (NRE) is available as the reference implementation, as well as several extensions to the API and to NRE. Continue Reading »

Older Posts »

Bad Behavior has blocked 270 access attempts in the last 7 days.