Management as Craft

Management in general is very generic and might involve very varied role and responsibilities depending a lot on where we are. Not too kill the fun of hundreds and thousands of job titles floating around at the moment within IT with the suffix as Manager, I dare to list down some of the very basics one must possess in my opinion but then it can never be comprehensive enough to cover most of them.

1. Earn their trust and trust the ones you are managing as a team lead – Give them the space, enable them to be effective, keep them out of the politics and unnecessary management value and vision dialogues, do not over inform them of the goals and objectives as they very well know the importance of the business and how much impact they are already doing through high quality deliverable. Make them comfortable and protect them to gain their trust.

2. Remain connected always but not micromanage – Make sure they feel valued and even more their work by asking smart, relevant queries even if you the answer to many. Never micromanage and leave them to manage themselves just being sure they are very clear on the goal and timelines. Development and coding background especially ability to help with the design and architecture decisions really help and help you being closer to the so called technical crowd of the project

3. Let them own and feel responsible for their work – Empower them and let them handle it giving right support and guidance throughout. Do not make them agree to you all the time but challenge them asking for ways to improve and optimize the work and velocity

4. Do your bit for their morale – Nothing is good for the team as much as highly motivated and energetic team working with you. Inspire them , reason it out and keep them informed about all the important decisions no matter of it effects them directly or indirectly. Not just 1/10th but atleast 8/10th picture of the importance organization changes happening and why

5. Be there to say “No” for the team – Never leave it for the team to come back and say no to you. Be the first to take the shot if you really believe if it may cause distraction to the team to meet their goal and commitments, the team will not be able to complete it, we are not going to sacrifice on the quality, the testing team doesn’t have enough to get started with the testing.

I know there are a lot more and may be I will update the post as I evolve more as a manager and learn this craft which actually doesn’t have that many hard ground principles or rules as such

Leadership Smells

Just like code smells, I just wanted to highlight some irritating and disgusting practices people follow in the name of leadership. Do these if you want to join the same group of …………

1. Behave, act and communicate what you are doing as path breaking, out of the world, big value add for the organization
2. Your sole aim of existence is to impress your boss, be on his side explaining your achievements and how much support you have got from him/her to achieve them
3. Always lunch with you boss and never with your team.
4. Try to keep things confidential as much as possible to enjoy being in the elite group
5. Keep the time which you need to spend with your team as low priority over everything else
6. Reorganize everything as per your convenience once you move into the new role to demonstrate your value and the impact of your role and hierarchy
7. Delegate the responsibility not the credit or recognition of the good work done
8. You be the single point of failure for any ideas or suggestions coming from the team you are leading
9. Never challenge your boss or even you have to, to demonstrate such a behavior do it where it impacts the least
10. Have few favorites within the team. Trust them blindly, they are always right

Do Not Say ‘YES’

When you not mean it. Really I have realized over the past few months that all of us have got so accustomed to saying Yes that it has now become a habit, a very disgusting and irritable habit.

Will the document be ready by tomorrow – ‘YES’
Are you sure you understand what needs to be done – ‘YES’
You sure no blockers – ‘YES’
Will it work – ‘YES’
You did it by yourself – ‘YES’

No I am not preaching, we all lie, it is part of our world now, we all manipulate stuff and then there is nothing wrong in doing it, it is just the extent of it and how often.

Defer the problem and it might never come back – Why is he chasing me? Just say YES for now and he will get too occupied later on to bother me again. I can always come up with an excuse if it comes to that

Not sure but damn I know how to figure it out – I almost know what he is explaining but then I can always refer the documents somewhere or at the worst case reach out for help. I know he will explain it again, he is equally responsible for its success

The idea is not too harm anyone but instead to safeguard oneself assuming it is just an innocent ‘YES’ which can cause no damage but to tell you the truth, it can and that too bigtime as it will make you loose your credibility, the trust and faith for anything and everything between the two. It is OK if it is done out of ignorance and that too very rare but if someone gets casual about it then it is a problem.

But Why

1. Out of fear – To protect oneself from the immediate huddle

2. Just a simple lie – Let me impress, he is anyway never going to know the truth so why not use the chance

3. Overconfidence – ya I know almost everything there is to know and I know I can easily do it.

Do you think this makes sense? I know ‘YES’ :)

I hate meetings

Who doesn’t? I guess not everyone, because I see some folks in my office moving between the meeting rooms all the time making me wonder when do they get enough time to implement what they have discussed through those meetings or may be they are just planning, updating, marketing themselves in the name of management.

Few points to help

Never sit for a meeting which has less then 5 people especially if it is about some sort of status. It will make you hurry up and not get into ideal chit chats, always a sense of something important about to happen outside the room. But again some people use meeting to create connections, demonstrate communication skills and boast of achievements which they never had

Never use pen and paper when you should use whiteboard for discussion. It will keep the group agile and attentive, help make faster decisions and move quickly to conclusions

Never go through documents or 5 page long status reports. Keep them as a pre read (if they have to be that long which I have never believed to be such). Two slides, five bullet points on a paper or few post it might be enough

Have a person run the meeting who is not the leader of the group otherwise he is going to fill the meeting with irrelevant blabbering. Never try to fill in the left over time, more often then not everyone can use that extra time

Take the content offline if it is relevant for only a subset of the people attending it which is generally the case for a focused discussion where you are developing the ideas, exploring the options etc

If a meeting is scheduled for more then 30 minutes with more then 3 people involved. Re look

Non-indexed foreign keys

Let me start my first accepting a misconception which I had till very recently. I sort of always assumed that foreign keys are always indexed. A little more digging revealed that Oracle, DB2 and even SQL server does not create an index for a foreign key automatically. So it has to be explicitly done.
We all know indexes has cost associated to it. Apart from using the storage space, it has to be maintained by the database on inserts and updates but still it is very good idea to create an index for a foreign key and especially when

  • We have a use case where deletion of the parent row cascades into deletion on the child table. Otherwise it will lead to a full table scan of the child table for each parent row deletion.
  • We frequently join parent and child tables. Otherwise it will have a performance impact.

So basically a little bit of a trade off as what we really want to do but in general it is always a good idea to have an index on a foreign key.

But does all this have any impact on how we do our Hibernate mappings, yes for sure. So for example if we decide to not index a foreign key, then

  • Be careful while using : on-delete=”cascade” even though the database has a support for it
  • Always specify lazy=”true” to prevent a join and eager fetch of the child rows.

Now what is this Git?

It is an open source version control system. So why do we care? We already have subversion. Here are few points which might get you interested.

It is a distributed version control system – which means every user has a complete copy of the whole repository locally on his/her box, I mean everything with complete history and thus the ability to track the revisions without going to a central server. It brings in the advantage of looking at a file history offline and in no time. It also brings in a side effect of having the repository backup at so many places.

Branching and merging comes in naturally – Since every check out in a way, is a sort of branching by itself, the whole process of branching and merging for Git can be compared to checkout and commit for may be subversion.

Offline and Extremely fast – Remember there is no network latency as everything happens locally, as the local copy on a box is a full-fledged repository. So no matter what we are doing, committing the changes, looking at a previous version of a file, looking at the history, performing a diff or anything else we do not need a network connection to the central server and it is damn fast.

Does need a small space – If every user has a complete repository on his/her local box, so obviously there is a concern for the size of it. Fortunately the way it is packed it is much smaller in size then may be subversion.

Not yet good support for IDEs – Not yet quite there to support most of the features from IDEs like eclipse or may be a windows explorer extension which we have for subversion. Although it does provide command line tools and graphical interfaces like git-gui

Tracking binary files – Git considers each merge of a binary file as a new file and thus do not support tracking and history for such files.

If these are not enough to arouse the interest, may be looking the projects which uses Git for their source code management might as well.

http://git.or.cz/gitwiki/GitProjects

Waste Elimination

Waste by definition, is garbage or rubbish and elimination of it quite literally means removing the bad, rotten, stinking practices from our software development process and code smells (a side effect of not eliminating the rubbish) from our implementation.

When we talk about lean manufacturing or more precisely eliminating the waste, then essentially what we are talking about is

  • Delivering what makes sense to the customer and nothing more, as anything more is a waste. Try and help the customer distinguish between what he really needs against what he might need.
  • Keep paying off the technical debt as soon and as much as possible. I consider paying off technical debts as synonymous to eliminating waste.
  • Keeping a constant flow of work and working at a sustainable pace, eliminating the chance of dip in productivity, quality and motivation.
  • More lines of code when less can do, is a waste. How often we have looked at a big massive codebase and thought to ourselves. What a waste? Get rid of it and every time I have a done it I have felt very good about it. Just think of it as if removing even few grams of weight from your backpack while travelling on an adventurous trip. Code light and it will definitely pay off
  • Eliminate the artifacts which states what we are going to do, by really doing it. Non working, out dated artifacts is something we should always avoid
  • Eliminate specialist roles as that would promote collective ownership and passion to collectively work for the success of the project.
Follow

Get every new post delivered to your Inbox.