Archives For Architecture

Big Compute or Big Data?

This question comes up on a fairly regular basis. So I thought it would be interesting to share my understanding in hopes to help you make the right decision.

Both are enablers, and they create opportunities through various approaches. When the problem is understood, and the algorithms vary by parameter, then Big Compute is definitely an approach to consider. When we know our input data, and are experimenting with various algorithms, Big Data is a clear winner.

This being said, let’s try to materialize this into something more concrete.

Big Compute shines at large scales. Easily parallelizable workloads are the best use cases, because they allow us to break the workload into independent tasks. This is where we can gain the most from large numbers of compute cores. Big Compute is all about executing any software package, written in any language by passing in variables. This creates an amazing opportunity for developers to optimize their code to be extremely efficient. Optimizations range from concurrency management, memory management, limiting IOPS and other aspects like network communication optimization. Possible scenarios are well known algorithms like Monte Carlo simulations, rendering and work flows.

Big Data is all about empowering us to experiment with our data by providing us with tools, query languages and scripting capabilities that are geared at giving us a lot of agility. Tinkering with algorithms, is the perfect use case. We know our data, and want to extract insights from it. This means that we’re going to clean it, shape it and question it. Big Data is built for this; it makes it possible to iterate through multiple versions of our algorithms in a way that’s difficult with Big Compute.

So now that we’ve nailed this down, which is right for your workload?

Share your thoughts in the comments below

The Greenfield to Brownfield Transition

There’s a special moment in every project where it transitions from a Greenfield (new) project to a Brownfield (legacy) project. This moment usually occurs close to the second release.

As developers, we love Greenfield projects. It’s a new adventure where creativity runs wild and free.

The transition of a project from Greenfield to a Brownfield is an event that we can all appreciate. It’s delicate and requires attention from everyone on the team. Continue Reading…

What should I be looking for during Code Reviews?

For the longest time, I was wary of Code Reviews. I used to spend most of my time implementing features and felt that Code Reviews robbed me of my precious time. I was mistaken and have changed my approach.

Our team uses systematic Code Reviews to help us normalize our code base. It has helped us to set our expectations and to identify major defects before our clients got to experience them in production. We have a minimum of 2 reviewers for each code contribution and we encourage everyone to take part in Code Reviews. The practice has the added benefit of creating opportunities for developers to look at different parts of our solution.

Thus far, it’s been a great way to share knowledge and practices amongst our team members. I hardly hear anyone swearing during reviews and I rarely see any code that strays from our common expectations. It has made onboarding new team members easier because once they understand our standards, they’re able to contribute with code and Code Reviews.

Code Review tools don’t always provide enough context for each piece of code that we need to review. This makes it a challenge to perform effective Code Reviews in a timely manner. To make my life easier, I try to concentrate on things that don’t require me to understand the full context. For example, I look at standards, documentation, Unit Tests and try to use common sense to identify as many issues as I can. Continue Reading…

The Winchester Mystery House™ is an extravagant maze of Victorian craftsmanship – marvelous, baffling, and eerily eccentric, to say the least. Tour guides must warn people not to stray from the group or they could be lost for hours! Countless questions come to mind as you wander through the mansion.

Is Software Architecture Important?

When we talk about software architecture, we often refer to the The Winchester Mystery House™ as it has a lot of interesting features, like a staircase that descends seven steps and then rises eleven. It has windows in the ceilings and staircases that go nowhere. It has doors that could be fatal if someone carelessly stepped through them. It is said, that it was built as a maze with secret passages everywhere. This house, is very interesting to software developers because it teaches us important lessons about our craft. Have fun, look it up on your favorite search engine, then ask yourself if the software you’re currently working on makes you think of the The Winchester Mystery House™.

Writing software for computers to understand is easy. Modern tools do all the heavy lifting for us. They validate that our code compiles down to something that can be executed, they optimize instructions and they even correct some of our mistakes. But what they don’t do for us, is write code that can be understood by other human beings… Now that’s hard!

Continue Reading…

I’ve been working on NopCommerce for the past few weeks and I keep finding interesting code. The following constructor signature makes me ask a very simple question with a very complicated answer…

When is dependency injection too much?

    Bottom line, is that when I see code like this, I can’t help myself… I have to ask

Could this have been done differently?

public OrderController(IOrderService orderService, 
    IOrderReportService orderReportService, 
    IOrderProcessingService orderProcessingService,
    IDateTimeHelper dateTimeHelper, 
    IPriceFormatter priceFormatter,
    ILocalizationService localizationService,
    IWorkContext workContext, 
    ICurrencyService currencyService,
    IEncryptionService encryptionService, 
    IPaymentService paymentService,
    IMeasureService measureService, 
    IPdfService pdfService,
    IAddressService addressService, 
    ICountryService countryService,
    IStateProvinceService stateProvinceService,
    IProductService productService,
    IExportManager exportManager, 
    IPermissionService permissionService,
    IWorkflowMessageService workflowMessageService,
    ICategoryService categoryService, 
    IManufacturerService manufacturerService,
    IProductAttributeService productAttributeService, 
    IProductAttributeParser productAttributeParser,
    IProductAttributeFormatter productAttributeFormatter, 
    IShoppingCartService shoppingCartService,
    IGiftCardService giftCardService, 
    IDownloadService downloadService,
    IShipmentService shipmentService,
    CatalogSettings catalogSettings,
    CurrencySettings currencySettings, 
    TaxSettings taxSettings,
    MeasureSettings measureSettings, 
    PdfSettings pdfSettings, 
    AddressSettings addressSettings,
    ICustomerService customerService)