//https://www.youtube.com/watch?v=APNWCe56cQA

Saturday, December 23, 2023

Presale Estimating for Software Projects

 


As a software engineer, one of the most interesting and challenging tasks is performing estimates for presales. This is crucial for identifying and setting the right budget and resources for a project. Most companies prefer to embark on something new with, at the very least, a high-level understanding of the forecast, making presale estimates invaluable.

The first step in this process is forming an estimating team, comprising developers, QA engineers, business consulting team members, project management team members, and experienced architects. When faced with such requests, the initial action is to identify resources/engineers with similar or related domains/projects within the organization, seeking expert advice for this new challenge.

In the initial stages, stakeholders often have a vision or dream about what needs to be done. However, during presale estimating, it's crucial to identify realistic requirements, akin to separating water from milk. This technical challenge demands engineers to provide the correct estimate, the most challenging and vital aspect of the process. When a customer requests an elephant, delivering a bull is not an option. The complexity arises from different stakeholders having varying perspectives on what needs to be done. In scenarios where detailed requirements are not provided by the client, the estimating team must create a process to identify requirements, involving several brainstorming sessions to clarify them.

Understanding the project's nature is crucial, with different project types requiring distinct approaches:

  • Totally new ground-up development: Understanding the customer's domain and requirements through meetings and Q&A sessions with the client's management team is essential.
  • Feature enhancement: Understanding customer domain and requirements through meetings and Q&A sessions with the client's management team, along with the technical engineering team's input, aids in gaining a high-level idea.
  • Integration: Identifying customer domain and requirements is crucial, followed by an investigation of the integration platform to understand its support and limitations.
  • Support and maintenance: Gaining a proper understanding of the existing system and acquiring knowledge transfer from technical teams is essential. Estimating on a time and material basis, along with a clear understanding of SLAs, is beneficial.

Once the presale estimate is initiated, especially if based on new technology or a totally new domain, performing a few proof-of-concepts (POCs) is recommended to identify the high-level effort required.

During the estimation process, there are two possible scenarios:

  • Another engineering team within the organization might already be developing features for the client.
  • The project could be entirely new.

Leveraging in-house knowledge is beneficial when other teams are involved, involving multiple rounds of knowledge transfer (KTs), Q&A sessions, and review sessions. For new projects, engaging with the client is crucial, ensuring not to waste their time. After the initial discussions, preparing questionnaires, risks, and assumptions and clarifying them with resource persons is important. Once all required information is gathered, preparing a high-level estimate and reviewing it with domain experts, senior developers/architects, and the business consulting team is essential. Modify the estimate based on review comments before presenting it to the client.

Once all requirements are set, filling in estimating values is possible. Using estimating techniques like the three-point estimate (3P) is recommended for optimal values. Importantly, listing down all assumptions, risks, and design notes alongside the estimate is necessary, acknowledging that it's not feasible to perform POCs for all scenarios. Performing several rounds of reviews with the team, domain experts, other experts, and finally with the customer ensures a well-refined presale estimate. This comprehensive approach aims to facilitate the successful execution of presale estimates.

Wednesday, December 20, 2023

Embracing Change: The Ever-Evolving Landscape of Knowledge Acquisition in the Software Industry


 The process of learning, unlearning, and re-learning has been a cornerstone of human societal evolution, contributing significantly to our collective progress. While traditional methods of passing knowledge down through generations have been prevalent, the modern era, particularly in the software industry, demands a dynamic approach to acquiring and updating information. This blog explores the necessity for software engineers, especially those focusing on Microsoft Technologies, to continuously undergo cycles of learning, unlearning, and re-learning in the face of rapid technological advancements.

In the pre-millennium era, individuals often spent their entire lives based on the knowledge acquired during their early stages. However, the advent of technological advancements has drastically shortened the lifespan of information, leading to a constant need for updates and adaptation. New inventions emerge, and established facts undergo rejuvenation through the latest research. As a result, the modern individual must navigate multiple cycles of learning, unlearning, and re-learning.

For software engineers, especially those immersed in Microsoft Technologies, the experience is a testament to the necessity of adapting to change. Microsoft has continuously evolved its products, from the introduction of GUI support in its operating systems to the recent incorporation of Linux subsystems. Programming languages, too, have undergone significant transformations, with advancements from VB to C# and changes in frameworks, now extending support across all platforms. The constant evolution in this domain necessitates a commitment to staying current with the latest developments.

As living beings, we are inherently subject to the natural selection theory — either adapt to new knowledge or face obsolescence. The software industry has witnessed several technological eras, from the PC/server era in the ’90s to the web/internet era from 2000 to 2010. The subsequent decade focused on cloud computing, mobile technologies, and the Internet of Things (IoT). The current trend revolves around artificial intelligence (AI). Early developers juggled multiple responsibilities, coding while keeping everything in mind. Subsequently, engineers turned to Google for assistance. With the advent of AI, specifically tools like Copilot and Code Whisper, the development process has become more accessible than ever, allowing software engineers to adapt efficiently.

As software engineers embark on their professional journey, the Microsoft Technologies saga encourages a mindset that acknowledges change not as a disruption but as a symphony of possibilities. The ability to navigate this intricate journey of learning, unlearning, and re-learning is not just a skill but a torchbearer in an industry where resilience and adaptability are the sparks that ignite the flame of progress. In the face of ever-shifting paradigms, let this be a rallying call to embrace the unknown, for within it lies the boundless potential to shape the future of technology.

Sunday, December 17, 2023

Embarking on Software Engineering Journey with Microsoft Technologies

 


This article will guide you through the essential knowledge and tools you need to become a proficient software engineer in the Microsoft ecosystem.

1. Programming Languages: Diverse Options in the Microsoft Ecosystem

Embark on your software engineering journey by exploring a myriad of programming languages within the Microsoft ecosystem. While C# and TypeScript are highly valued, the landscape extends to include versatile options such as Visual C++, Visual Basic (VB), and F#. C# is renowned for building Windows applications, TypeScript enhances static typing for robust web development, and the additional languages offer flexibility and unique capabilities for varied development scenarios. Familiarize yourself with this diverse set of languages to broaden your skill set and adapt to different project requirements.

2. Data Structures and Algorithms: LeetCode, HackerRank, and FreeCodeCamp

Strengthen your problem-solving skills by practicing on platforms like LeetCode, HackerRank, and FreeCodeCamp. These resources provide a plethora of coding challenges to enhance your proficiency in data structures and algorithms.

3. Microsoft Learn for Technical Skills

Utilize Microsoft Learn to enhance your technical skills. This platform offers a variety of courses and hands-on labs, covering Microsoft technologies and tools.

4. Version Control: Git and Azure DevOps

Learn Git for version control and consider using Azure DevOps for end-to-end application lifecycle management. These tools facilitate collaborative development and efficient project management.

5. Integrated Development Environments (IDEs): Visual Studio and VS Code

Familiarize yourself with Visual Studio for comprehensive development and debugging features. VS Code, a lightweight and versatile code editor, is excellent for web development and supports various languages.

6. Command Line Mastery: PowerShell, Git Bash, and Command Prompt

Understand the power of the command line using tools like PowerShell, Git Bash, and Command Prompt. These tools enhance your efficiency in executing tasks and interacting with your development environment.

7. Web Development Basics: Angular, React, Vue.js, and ASP.NET Core

Dive into web development with popular front-end frameworks such as Angular, React, and Vue.js. Additionally, explore ASP.NET Core for server-side development. ASP.NET Core is a robust, cross-platform, high-performance framework, perfect for building modern, scalable web applications.

8. Web API and RESTful Services

Understand the significance of Web API in modern development. Learn to design and implement RESTful services using technologies like ASP.NET Core. This skill is crucial for building scalable and interoperable systems.

9. Databases: MS SQL for Relational Databases

Explore the world of databases, with a focus on MS SQL for relational databases. MS SQL is renowned for its robustness and is widely used in enterprise applications. Learn about SQL queries and database management to store and retrieve data efficiently.

10. Soft Skills: Effective Communication and Collaboration

Acknowledge the importance of soft skills. Effective communication, teamwork, and collaboration are crucial in the software development industry. Cultivate the ability to express your ideas clearly and work seamlessly within a team.

11. Software Development Methodologies: Agile and Scrum

Familiarize yourself with agile methodologies like Scrum. Understanding the software development life cycle and project management methodologies will prepare you for collaborative and iterative development.

12. Common Issues for Freshers: Impostor Syndrome and Overcoming Challenges

It's common for newcomers to face challenges, including impostor syndrome and the fear of making mistakes. Remember that everyone learns at their own pace, and overcoming challenges is an integral part of growth. Seek support from mentors and peers, and don't be afraid to ask questions.

13. Inspiration to Persist: The Journey to Mastery

Despite challenges, keep in mind that the journey to becoming a proficient software engineer is a continuous process. Celebrate your victories, no matter how small, and embrace the learning curve. The technology landscape is vast, and each obstacle you overcome brings you closer to mastery.

Embarking on a software engineering journey with Microsoft technologies opens up a world of possibilities. Continuously hone your skills, stay curious, and never stop learning. The combination of practical experience, a strong technical foundation, soft skills, and perseverance will pave the way for a successful career in software development. Happy coding!

How to create new EC2 machine using existing EC2 instance in AWS

If you are an AWS user working with EC2 instances, there is a high chance of needing to clone existing EC2 instances. The steps below descri...