Author » Otavio Ferreira
14 Jul 2011
23 Aug 2010
Agile software development methods have reached great popularity among technology-based companies around the globe, arguably due to their effectiveness at managing the project stakeholders’ expectations and goals. However, this positive outcome is directly related to the team members’ ability to carry out the planning phases. And unfortunately the minimalistic theory frequently observed in agile processes tends to result in poorly written user stories.
14 Jan 2010
Web services are key elements in the fields of distributed software engineering and code reuse. They also play a very important role on the Semantic Web by providing data to semantic software agents, as described by Tim Berners-Lee:
“The real power of the Semantic Web will be realized when people create many programs that collect Web content from diverse sources, process the information and exchange the results with other programs. The effectiveness of such software agents will increase exponentially as more machine-readable Web content and automated services become available. The Semantic Web promotes this synergy: even agents that were not expressly designed to work together can transfer data among themselves when the data come with semantics.”
27 Nov 2008
This post might be considered academic, but it offers a good overview of what I believe to be the guiding principles in terms of software modularity.
In a previous post we met object orientation’s worst enemy (i.e. strong, unplanned dependencies among classes). It is now time to have a closer look at Dependency Inversion, which is one of the most efficient OOP techniques available with which to fight our adversary.
14 Oct 2008
Strong dependencies among classes (or components) are definitely the villains within a software architecture. The opposite of strong dependencies, ie completely decoupled architectures, do not exist however, because such a utopian schema would actually result in no messages being exchanged among objects at all. Architects should focus on minimizing strong dependencies, designing only well-planned ones. I refer to the latter as healthy dependencies, and they undoubtedly bring a lot of benefits to a system.

