Tuesday, May 22, 2012

Software Engineering Tips

These are tips & ideas I have learn through my career which help me daily with the thought process in situations I am in.  I will like to thanks all those out there who influence me in a positive way.

80/20 Productivity to Effort Ratio

What this means is you can accomplish 80% of the work with about 20% of the effort.  But to accomplish the remaining 20% work you need an 80% effort.

For me this relates to a new software project when building it from scratch.  With little work you build the base architecture but you still have a long way to complete the actual project. Using the architecture you can quickly add most of the implementations for the final project and most certain that will get you the 80% work done with 20% effort.  But then you hit the corner cases and you have to re-think how to implement them trying to follow the existing architecture.  These cases fall in the 20% work left and it takes an 80% work to actually integrate correctly.

Take the bull by the horns!

Early in my career the company was growing too quickly and my manager had too much on his plate.  But he wanted me to grow with him and gave me great opportunities by being the main contact between some of the customers and the company.

I remember being shy because I have never handle business, so I was afraid to fail.   One day he gave me  a great advice saying: "Jon, you have to take the bull by the horns! Be the driver and own it!"

This was like a wake-up call for me.  He trusted me and wanted me to take charge to make things happens.  He push me to think "out of the box" and do things my own way or any other way to get things done.

With time I realize how important is "to take the bull by the horns!".  When you really do it, you own the game.  You are on top of the requirements, design, and implementation.  For me owning it makes the job easier because you know all the angle and probably better than anyone else since you are now the expert.

But just remember that "with power, there comes great responsibilities".  So when you make calls don't take them slightly.  People will look to you and drive by your direction.  So is your fault if you sink the ship.

The Team Lead

When you have a team, it stops being about you and the game becomes being a real leader.  For this you need to try knowing your team, what they are capable of, and what they are interested in.  Help them get their tasks complete by offloading obstacles and avoiding any interruptions which disturbs focus in the main goal.  Trust them because most people really want to do their job right.  At the end, as a group is better to have only 1 person behind (yourself) than 4 to 8 people with their tasks half done.

I have big shoes to fill compare to the team leader I had once.  He always was there for the team and earn our respect for that.  The relative small team we had was able to achieve pretty big tasks in the company because he kept us focus and he handled must of the business needs.  He was a great listener who adjusted to feedback from his peers as well as his team.

Listen & Be Respectful

We all have ideas and see things differently. A problem can have more than one solution, so the trick is listen for ideas.  My best friend and I are totally different customers and designing something brings always the best conversations.  His appreciation for how a solution should work is so different from mine but we both are good listeners and discuss both approaches (by trying NOT to endanger ourselves).  Like I tell my daughter:  "Need to use  your listener ears!".

Not everyone has this skill so sometimes you have to put an extra effort to listening at others first.  That will give you time to think about your proposal and how to present your idea better.  At the end, the only real time to push hard is when a decision is about to be made.  
So listen, because there best knowledge is built collectively.

I can do it too...

If one can do it, I can do it too!  This is a motto which have taken me long way.  It got me into computers, electrical, mechanics, building, cooking, design, blogging, and who knows what else.

At the end, trust yourself and try.  Some topics are harder than others.  Especially if is a field you have never dealt with.  But guess what, as you keep trying you will build knowledge and experience.  The things you learn from one field, most certain will help you in another.

It can be scary not knowing and failing.  But guess what, is even more satisfying to learn, stand for yourself, and conquer the subject!


To my readers, thanks for letting me talk to you.

Hope this post helps you and please share your tips as well.  :)

Sunday, May 20, 2012

Phone - Photo transfer direct to share folder

Personally I still store photos in my own server and not in cloud computing.
Maybe I should try looking for a cloud back up service later...

But for those out there who have the same practice, you probably notice that phones really don't have too much support for transferring photos directly to a share folder.  Lots of apps do the same like uploading to certain services or making your phone a host to access from the PC browser.  In my case I like simplicity and control.  I just want to select the photos from my phone and send to local server over wi-fi... done!

So far these are the best options I found.

Android:  Sweet Home WiFi Picture Backup

Sweet Home is a simple application which once configured to access your shared folder, it allows you to send the new photos by clicking "Upload Now". And also has an option to automatically upload whenever the phone is connected to the network.  Simple!

This application works really well for me using:  Motorola Atrix 4G & Windows 7 for home server.  It has a free version for try out, but please support the developers and purchase it if you like!  :)

iPhone:  Files Connect

This application is not as simple as Android's Sweet Home for sending photos to the share folder, but it does carry a lot of functionality.  Files Connect is more like a general network file transfer application as the name suggests.

At the end, it is really easy to send photos to the shared folder once this is configured.  You only need to browse for the photos in you phone and "select / copy" them to later "paste" them at the share folder.  Something I liked a lot was the transfer activity monitor which allowed me to see the transfer was not hanged.

In my case I had an iPhone 4G and the share folder in Windows 7 home server.  The application was able to transfer over 1,500 photos with no hangs in a descent amount of time.  It took a little to start the transfer but still less than 1 minute.  I am happy from purchasing the application.

Quick note:
In order to transfer even faster, I browse the phone from the server.  Then PULL the content instead of pushing it.  This significantly reduced the transfer time be 66%.  Just look in your router for the IP the phone is connected to.

General Comment:

If you need applications which directly communicates with your share folder, then search for Samba client applications.  Both of these applications supports the SMB protocol which is what allows the direct access between phone and PC.

Hope this helps others.

Business over Engineering

This post is a retrospection of a simple concept for managers, but something new engineers tend to struggle with.  I include myself in that group when I recall being a fresh graduate and ready to do things the best possible and try saving the world.. (but I never got the cool flying cape).

Early in my career I struggled with the problem of:
Business > Engineering (business over engineering).

I think this is a very common problem for most technical oriented people.  Why?  Because they know the in & out requirements to solve the problem, but not always have the best resources or scenarios to give it an "engineering solution".  They only know business is pressuring and that causes to deliver a "non-optimal" solution.  :(

I remember this struggle kept me asking WHY?..  Why can't I deliver a "perfect" solution?...

For me to understand this, I had to understand the Business problems.

That's when I realize:
Sales > Business (sales over business).
In order to have business, we need sales.  Why?  Because sales is what makes the $$$ money we all need.  But shouldn't it be Business > Sales because we sell "our businesses".  The reality is NO!  If there is a Sale to make $$$ profits, we will make our business to tap there.

This gets us to pretty much the top of the chain:
Customer > Sales (customer over sales)

Ever heard the expression "the customer has the reason"?  Well, they are the ones $$$ paying after all.  So what the Customer wants is what Sales will try to fit and pitch in for getting the contracts made.  And if an engineer needs to jump through hoops to get there, "they better".

So in summary the chain of business can be summarized as:
Customer > Sales > Business > Engineering

Of course this is a super simplified version of how things work, and devil is on the details of how the actual chain executes.  But it's important for managers to communicate well with their team and get them in the real context of how things work.

Personally I think the key is in identifying where the real engineering is required and separate it from the softer business requirements.  That way your team can focus in building a better core and avoid over engineering functionalities which tend to be more flexible.