December 22nd, 2009 by Moti Karmona | מוטי קרמונה · No Comments
I have just upgraded to WordPress 2.9 – Carmen (named in honor of the jazz vocalist Carmen McRae) in less than 3 minutes…
WordPress 2.9 Highlights
* Global undo/”trash” feature
* Built-in image editor
* Batch plugin update and compatibility checking
* Easier video embeds
* Over 500 tickets, bugs and enhancements
Tags: Blogging · Simplicity · Tools · WordPress
December 13th, 2009 by Moti Karmona | מוטי קרמונה · 5 Comments
I have found this “old” movie we made back in 2002 during my work at Mercury to “educate” new employees on our code review procedure.
p.s. Raz Yalov was nominated for best supporting actor that year ;)
Enjoy…
************************************************************************
I have also copy-pasted the presentation transcript below…
The Golden Rules of Code Review
Do a self-review first
Stick to the requirements
If you need to explain it, document it!
It’s about the code – not about you!
Unit testing
Do a self-review first
Have you checked all extreme cases?
Is your solution KISS?
Is your code self-explanatory?
Check it as if it was written by someone else
Ask yourself the questions you think you are about to be asked…
Keep It Simple Stupid…
Stick to the requirements
Make sure all aspects of the requirements are filled
Make sure you have tested both trivial and extreme cases
Document all thoughts and limitations in the code
Reference the requirements documents from your code
I18N – make sure the code supports multilingual capability where needed
Documentation
Document your files and your functions
Give informative comments
Explain the logic behind your decisions
If you did something that is not logical or intuitive, explain why
If you learned historical info while learning the code, document it (be creative :)
Follow a standard documentation format
When possible, use known design patterns and document the design pattern you chose
Unit Testing
Make sure your unit test is part of the change
If you can’t automate the test, check-in a manual procedure to run it
Make sure all aspects of the requirements are covered by the tests
Document all the tests you wanted to do but couldn’t
Test the I18N behavior of your code
The Code Review Life Cycle
“Self-review” your code
Schedule a code review
Schedule enough time for both people involved
When possible, schedule for a time during the morning
Split the review into a few sessions, if needed
Switch your mind to “listener” mode
Write down all comments
After the code review is done, apply the necessary fixes and schedule a second review if needed
Check-in your changes
Code Review Tips
When you program, remember the last code review
If you disagree with the reviewer, invite a 3rd person to review and decide
In special cases, invite special guests to review your code
When change is small/simple/intuitive, do an “e-review” by mailing your change to the reviewer(s)
When self-reviewing, fix mistakes on the spot… :)
Tags: Development · Mercury · Software · Software Management
December 12th, 2009 by Moti Karmona | מוטי קרמונה · 2 Comments
This is my recommended check-list for high level design review.
***********************************************************************
*** keep it simple and make sure it answers all the requirements ***
***********************************************************************
Reverify your Requirements
Functional specification, use cases and requirements are clear and publicly documented
Technical Requirements
Performance requirements
Security requirements
Resources (CPU, Memory, Storage, IO) consumptions limits
Audit requirements
Out of scope – What does the component NOT do? What NOT support?
Future extendibility of the component (options for future extension, generic features etc.)
High Level Design
Main components involved
Main Data flows
Components and sub-systems and how they relate to the component
Which sub-systems does it communicate with (e.g. Relation Façade)
Communication mechanisms (e.g. HTTP, WCF)
Which subsystems it is dependent on (e.g. Database, Gigaspaces) – What are the requirements?
Which sub-systems depend on it (e.g. App.) – What is the expectation?
Architectural Strategy
High availability and load balancing
Error detection, fault and recovery
Logging and statistics gathering
Capacity limitation, planning & resource management:
Memory consumption and management policies
CPU usage management
IO requirements
Storage requirement
Technical Assumptions
Limitations
Compromises
What does this design compromise? (Security, high availability, capacity, performance, quality…)
What are the engineering tradeoffs of this design, and why was the current design chosen?
Risks and weak points
Operation
Backward compatibility
Logging and Monitoring
Administration issues
Deployment issues:
How to deploy (e.g. can it be part of the regular release package?)
Required downtime?
Deployment risks?
Rollback capability
Testing strategy
What to focus on (80/20)
Functional test plan review
Deployment, environments, and setups
Fault and recovery
Load and capacity planning
Execution plan (phases, timeline, milestones, critical path, dependencies etc.)
Please comment if you think I forgot something…
Tags: Development · Software