Tuesday, June 25, 2013

Requirements, Development, Launch - Tip of the day



1. Write requirements to launch the full set of features.

2. Develop with flexibility for partial launch.

3. Plan to roll it out incrementally, but be ready to launch the full set of features.


                                                - almirsCorner.com -






#softwaredevelopment #softwareengineering #developers #development
<THE END>





Friday, June 21, 2013

Secret to providing work breakdown, estimates (LOE), Gantt chart and project schedule - Tech Lead perspective

Software Engineering tip of the day:

The secret to providing good level of effort (LOE) is to dive into deep low-level technical things and not get lost. This might mean that you do a brainstorming session and create a checklist of 100+ items. Then you need to eventually dive back to the surface and properly organize your information. The last step is to provide the numbers on each task per category and sum it up.

I like to refer to this approach as the the "rapper's cheatsheet" approach. Putting all the information on a single cheatsheet is crucial and then the organization (i.e. freestyle rapping) starts after that.

After you have done all of the above, then you can easily create a Gantt chart understanding all the task dependencies and resources available. The main thing is to keep the dependencies at the task level with right resources as opposed to keeping dependencies at the resource level.

Then if you wish to track this to the detail, you can plug it into project schedule using your choice of tool and one of them could be MS Project Office.

In the technical lead/management role, I prefer exposing the Gantt chart and big picture to all my engineering teammates as I don't want anybody developing in the vacuum. It pays off in the project in getting better results in the integration testing.

At the end of this exercise, I get all the information I need to lead the project and most importantly I get to focus on the technical things with the engineering teammates.

                                                 - almirsCorner.com -





#softwaredevelopment #softwareengineering #developers #development #LOE #estimates #SDLC #gantt #project #schedule


<THE END>



Wednesday, June 12, 2013

Software Engineering tip of the day - Code review during the project and NOT at the end

Software Engineering tip of the day:

Do the code review as the coding is taking place in the project from
day to day. This prevents deviations from the design and possible last
minute issues.

                                                 - almirsCorner.com -





<THE END>

Wednesday, May 29, 2013

Software Engineering tip of the day - History of the file being checked out


Software Engineering tip of the day - History of the file being checked out

Look at the history of the file that you are about to check out. This
tells you if there are any dependencies on other tickets. 

                                                - almirsCorner.com -


<THE END>



Monday, May 27, 2013

Software Engineering tip of the day - Checking in your code


Software Engineering tip of the day - Checking in your code:

Do a diff on the code before you check it in. This prevents unwanted
changes and critical issues if changes not noticed in the code review.

                                                - almirsCorner.com -


<THE END>




Thursday, May 16, 2013

Google I/O Keynote - 2013 (Very incremental improvements in the right direction)

Please watch this. I like the direction of Google and how they are unifying all the products and exposing APIs to developers as well. Very incremental improvements and in the right direction.





Keywords: #google #googleIO #googledevelopers
<THE END>





Wednesday, May 8, 2013

Acura RSX Type S (Year 2006) My test-drive

2006 Acura RSX Type S - my test-drive

I test-drove Acura RSX Type-S manual with the intention to see if I am still into the high-revving engines and to look for that ultimate all-around package while staying under $20,000. This car is definitely a fun car, but it has some cons that I will point out. Here is a quick review:

I revved the engine all the way to 8,000rpm and it gives you a thrill. The engine works freely and you can't hear any loud noises that indicate that the engine is struggling. The clutch feel is on the light side but it is not as light as the clutches coming from newer cars these days.

The handling was great. Close to neutral feel with a bit of understeer. If I put a good rear sway-bar, it would be more neutral-oversteer like and that would sell me this car with the thrill of high-revving engine.

The torque is the negative side, but then again it is not expected from Hondas. I was kind of used my chipped VW 1.8T with 230lb/ft of torque starting at low RPM. I think that the torque aspect cannot be used against these high-revving Hondas/Acuras.  This RSX accelerates fast, but it never has a surge of power; however the revving to 8k gives you a thrill that is hard to describe.

Conclusion:
This car is still definitely on my list. The handling and the free high revving engine are the pros and the missing torque is a bit of negative for Hondas/Acuras. For $17,000 and having an overall package (sports and space for kids), this stays on my list, but at this point it does not justify for me to spend on this car; I am currently driving/experimenting with Mini Cooper (base engine) and sports suspension.


Keywords: #acura #rsx #acurarsx #AcuraTypeS #rsxtypes 
<THE END>





Friday, May 3, 2013

Software Engineers and Cars - Explaining Shifting your Double-Clutch transmission to your fellow Software Engineer who is not into cars

Let me pick two topics that are dear to me and write one quick blog about it. I am talking about cars and software engineering.

I am a car enthusiast and a software engineering geek. Sometimes I have situations where some of my friends and some of my software engineer friends ask me the following question:

  • "Almir, why do you constantly shift gears in your sequential transmission if you can just put it in "Drive" and go?"


I have driven cars with manual transmission all my life until I recently switched to shiftable automatics to try it out. I can easily explain it using car terminology and start talking about RPMs and optimal shift points and torque needed to accelerate and so on............................but I quickly lose people with this explanation.

I need to word this in a way that my software engineering friends who are NOT car guys can understand and here is what I came up with:


Explanation to Software Engineers on what's on the mind of a car enthusiast:


Driving Automatic in automatic mode ==>
Checking in code that is NOT optimized and knowingly doing that.


Driving Automatic and manually shifting it constantly ==>
Checking in code that is well optimized.



Driving the real manual transmission ==>
Checking in code that is well optimized and enjoying that process very much.






Keywords: #cars #software #softwareengineering #deveopers #shifting
<THE END>







Thursday, May 2, 2013

2002 Porsche 911 Carrera (320hp/273tq) - my test-drive

2002 Porsche 911 Carrera (996 model) (320hp/273tq) - my test-drive

Porsche 911 definitely is my dream car and I wanted to see how an older 996 model does in my review. I found this model close to my area and decided to test-drive it. This car would put a smile on your face every day going to work. It handles as it is on rails and at the same time it so comfortable enough that for my taste I could take it on a 3-4 hour trip to Vegas and not get tired. I am impressed with the mechanical grip and also the overall technology and build quality. Even though this car is 11 years old, it felt tighter than some of the newer cars getting off of an assembly line.

Let me talk about the power. It has 320hp but it feel like 370hp because Porsche just masters in transferring that power to the wheels. I don't think that I would need the Turbo version of 911 because this one is just great as a daily driver. There were some sharp corners in my test-drive and the sales guys is like "down-shift to 2nd and slam on it through the corner".......... and I did........wow. This car just takes any apex confidently; it is neutral with a bit of oversteer in street driving and probably on the track, I could definitely get it to oversteer more.

If I had to pick one negative thing about this car, it would be the shape of headlights on the 996 model. I am not a big fan of these. I could get over that knowing that I could get this used sports car for under $30k; I could spend $1k getting some aftermarket headlights that would keep me happy.

Conclusion:
If you were looking to buy a new sports car in $30k range, step back and think about it. Test-drive 2002 Porsche 911 Carrera for the same cost but with 70,000 miles; big deal; the car felt like new and it is really a Volkswagen behind the shell. So if you do the maintenance at a friend's shop, it can be cheap to maintain.


Keywords: #porsche #porsche911 #carrera #996 #car #cars #carreview #autoreview
<THE END>




Monday, April 29, 2013

OneNote - NOT as a notes application, but as a database system

This is about using OneNote as a database and not as a notes application.

I use OneNote for note-taking and I have built up over 1Gb of notes over the years. The more I use it, the more I realize that it is really powerful. I am also realizing that it can be used as a simple database system.

What is the most powerful feature of OneNote? Simple answer: Searching

So how can you use OneNote as a database. I am not talking about a database system for which you can build applications to talk to it. I am talking about OneNote acting as an application and database all in one.

Let's say a doctor or a dentist come to me with the following requirements:
- I want to be able to easily find customer records
- I want to be able to have all customer records including pictures, x-ray videos and so on.
- I want my staff to enter notes on every visit and I want to be able to easily go through these notes.

The programmer in me would say, I will develop an application for you that will do all this. However, the software engineer in me analyzes the requirement and figures out the best solution (the most cost effective); then I would satisfy those requirements by doing the following steps:


  1. Purchase Microsoft Office 2010 or Office 365 (which most businesses have anyways)
  2. Install it on all the computers at the doctor's/dentist's office
  3. Set up a file server on the network (i.e. Drobo file server)
  4. Using OneNote, set up notebook that would be sitting on the network drive. Depending on the Windows account, you can set up different permissions on folders of this network drive. Maybe the doctor can only modify certain records. That can be managed through these permissions.


Set up these OneNote notebooks with its sections. Each section would have a list of topics/pages. For example, you can create a notebook called "Patients". Then the sections would be the patient name and account number. Each section/patient would have a list of pages and each page is really a record of that given customer.

Each page/topic in OneNote could follow a simple naming convention (i.e.  start with the date 2013-04-28 and then the subject or reason for patient's visit).

The search feature in OneNote is very powerful. In this case, if you search for the patient's account number, it will find all occurrences as you are typing the number in the search box.

Let's assume, the patient wants all the their records or specific records. In OneNote, you can easily go to the section for that given patient and send all/some of the notes into a PDF file, MS Word and many other formats. Then you can zip up this file with 256-bit encryption and securely transfer it to the customer via many different online file-share solutions instead of sending emails; we all know that emails are not secure and emails cannot handle large attachments.

Conclusion:

  • It does not cost you anything to prototype/implement this solution if you already have Microsoft Office.
  • Your staff can easily be trained on OneNote. There are many free online tutorials or local training programs that are affordable.




Keywords: #onenote #notes #notetaking #database #dentist #doctor
<THE END>





Wednesday, April 24, 2013

Production Launches and Having/Getting The Confidence That Your Code Works

Production Launches and Having/Getting The Confidence That Your Code Works

There are many approaches that you can take in verifying that your code is robust. Let me list a few of them:

  • Writing robust code that is easily maintainable. Maintainable code becomes robust in the long term. Keep it simple.
  • Having good code-reviews that detect and prevent severity #1 issues in your production environment. Typical issues that can be prevented are the ones that are abusing the frequency of I/O, memory utilization and string manipulation that is the subset of memory manipulation and CPU utilization.
  • Automated unit-testing and continuous deployments to your Dev environment. Automated integration testing is even more important/valuable. 
  • Having two types of QA resources: One QA resource would be executing the test-cases that cannot be automated. Another QA resource would be doing what I call free-form testing. Free-form testing requires you to have full understanding of all your products and you have to be the super-user of that application/site/system.
  • Having deployments automated to the point where you just clicking button but at the same time having post-deployment scans to verify if deployments were done on correct servers, correct folders and in completion.
  • Dashboard monitoring at the high-level with graphs showing the high-level state of your production environment. 
  • Monitoring the production environment (low-level events, logs...) before and after the launch so that you can tell the percentage change in the errors logged. Don't mix this with the dashboard monitoring that tracks the high-level state of your production environment.

You can do all the great work on the first 4 items, but what matters at the end of the day is if the last two items above are coming back with the positive results. If you don't have the last two items implemented, you pretty much don't have any visibility on the health of your systems in production and what customers are experiencing.

In what order do you implement the items listed above?

It all depends on your organization; however, you cannot be operating a business if you don't have the last items implemented from the checklist above. You can end up writing bad code and the last two items will save your day in the case when you deploy bad code to your production environment and in that case you can quickly roll back.

In the future topics, I will be writing more details on each one of the items listed above.


Keywords: #software #softwaredevelopment #softwareengineering #development #code #codereview #unittesting #integrationtesting
<THE END>





Sunday, April 21, 2013

Outlook.com / SkyDrive / Skype - Introducing Two-step authentication

Thank You Microsoft for releasing the two-step authentication for Outlook / Hotmail / SkyDrive / Skype. Thank you for listening to me :)     

Now I can start thinking about moving my OneNote notes into SkyDrive instead of having them reside in my local Google Drive folder that syncs the files into the cloud behind Google's two-step authentication.

The next move for Microsoft is to introduce some encryption on the data that resides in the cloud. I am talking about Dropbox type of encryption. Dropbox has two-step authentication and encryption as well. 


#twofactor   #outlook   #skydrive   #hotmail   #twostep   #microsoft
<THE END>







Thursday, April 18, 2013

Keep It Simple - Writing clean code - How clean can it be?

Keep it simple.

I am talking about writing simple code. You may ask what "simple" code is.

Let me first explain what simple code is NOT:

  • It is NOT about hard-coding
  • It is NOT about writing complex code and then commenting so much to compensate for its complexity.


Keeping it simple means:

  • Writing code that is self-explanatory and minimal comments to understand the concept. Overdoing the comments puts you at risk that the comments become obsolete as the code below changes.
  • Writing code that is configurable, but not over-configurable. If you find your self writing extensive documents to explain how the configuration works, then you are doing something wrong. You are either over-configuring it, OR you need a configuration tool that will manage your configurations in a presentable fashion.
  • Writing code that you can understand 6 months from now and more importantly that new software developers can understand when they join your team.
  • Writing code that is flexible enough that you can soft-launch any day to production without impacting the behavior in production. Depending on the build methodologies in your company, this type of approach can save you incredible time and resources.
  • Writing code that uses technologies and methodologies that are best to solve your problems and best for implementing functional and business requirements, and NOT using technologies/methodologies that are a trend and you find a way to utilize it in your code to meet the functional/business requirements. Do the right thing.


Keywords: #software #softwareengineering #coding #code #coding101 #keepitsimple
<THE END>






Sunday, April 14, 2013

Why is compilation considered evil in software engineering when plugging in new modules? Did we cross the line?

Why is compilation considered evil in software engineering when plugging in new modules? Is it really? Why have we gone so far as the software engineering community?

Since the introduction of XML, the software engineering community has reached the point where for some reason the compilation of your code code has been looked down upon. What do I mean?

I am talking about developing your application to the point where you can change configurations and plug in new modules without requiring anybody to compile your code. This sounds very fancy and it has been the selling factor from the engineering community to the management/decision makers.

The question is: Have we crossed the border and reached the point where the code is very complicated and not maintainable and where the value of this level of configuration is not worth anymore. 

You have to put yourself in the position of a new software developer joining your team or even a long-timer developer who has not worked in that area of the code. How easily can they configure and plug in new modules and how confident they are that they are configuring it properly. If they are struggling with this, then it's not worth it. If your configuration files are becoming so complex that you need to write documentation on how to configure it, then it is not worth it. It is not worth it because your configuration files are becoming so complex that you are writing your complex code that parses these configuration files. Essentially you are building something that is home-grown and we know what the downsides of the home-grown rule engines are.

Please do not misunderstand me. There are software applications that really require home-grown confidential rule engines and this mostly applies to software applications that are very static in its nature and all you are doing is just configuring bits and pieces and plugging in modules to it. However, most software application are NOT static in its nature; they are constantly changing as business requirements are changing. So in that case, you are developing a module that you want to plug in, but you still end up changing the code in your core application anyways. So what did you gain by over-configuring it?

Conclusion:

It is very good to have your software configurable and configurable only to the point where your configuration is self-explanatory and where your code is self-explanatory. Once you reach the point where you need to train software developers how to change the configuration files, then you are crossing the borderline of over-configuring your software for the benefit of not compiling code when you are willing to plug in a module. Compilation is not evil. If your build methodology is very robust, then you will be able to build your code fast, push to production fast and at the same time you are keeping your configuration simple to the point that you don't need to train your developers. 

Keep it simple !


Keywords: #software #engineering #development #compilation #configuration 
<THE END>




Wednesday, April 10, 2013

2009 BMW 328i Coupe, automatic - My Test-drive

2009 BMW 328i Coupe, automatic

I test-drove my friend's BMW 328i with tiptronic and Eisenmann cat-back exhaust to compare it to 128i manual that I drove earlier. Let me say that this BMW is just 10 times better with the tiptronic transmission and this is coming from a guy who has drive manuals most of his life.

If you remember, I liked 128i, but I did not like the very soft clutch that complimented the manual gearbox.

Let me get to the 328i review. BMW 328i also has a 3.0L (230hp) naturally aspirated engine which revs so freely, smoothly and fast which I am fond of. The car handles as if it's on rails because it came with BMW factory sports suspension. BMW tiptronic transmission is just better match for this engine because the engine revs so fast and with tiptronic (that shifts relatively fast), you can nicely push this car to its redline and shift quickly. The downshifts are also crisp. I've always driven cars with manual transmissions, but sorry dear BMW, the clutches on these manual transmissions are too soft for my taste.

However, BMW 3.0L engine, with the sport suspension and tiptronic transmission is just an awesome combo.

Let me get to the review of the Eisenmann cat-back exhaust that my friend had installed on his BMW 328i that I drove. This is the best quality exhaust that I have seen. It gives you that extra power and pull at the low RPM and it just sounds awesome. The sound is so deep and it makes you shift through gears up and down with a big smile.

Conclusion:

This is a great car. If you are ready to buy something luxury, respectable power, good handling, well balanced, then this is something you should consider.


Keywords: #bmw #328i #carreview #autoreview 
<THE END>